• Как заменить теги при использовании clone()?

    @DanKud
    Genri_Rus, функцию escapeRegExp можно прописать в любом месте кода, хоть в конце. JS код сначала полностью считывается, а только потом выполняется. По-этому разницы нет.
  • Как заменить теги при использовании clone()?

    @DanKud
    Genri_Rus, это из-за того, что мы добавили в вывод модального окна результат функции чтения из localStorage и получается, что когда мы снимаем все чекбоксы localStorage у нас пустой и пустое значение добавляется в модальное окно. Нужно просто задать условие, чтобы при пустом localStorage результат функции не записывался в модальное окно.

    пропишите вместо:
    modal.html(actLocalStorage(wrapReplace));

    условие:
    const localStr = actLocalStorage(wrapReplace);
    if (localStr) modal.html(localStr);
  • Как организовать в PHP проверку ключа массива в цикле foreach?

    @DanKud
    Владимир НЕО, но ведь в ответе, под которым мы с вами сейчас пишем комментарии, именно это и написано. Нахождения значения из массива по ключу без использования цикла:
    $arr["привет"] = "здарова " . $_POST[avtor] . "";
    $arr["ты кто"] = "Я бармен :)";
    $arr["наливай"] = "" . $_POST[avtor] . " Пивка ?";
    $arr["бармен наливай"] = "Пивка ?";
    
    $message = 'наливай';
    
    if (isset($arr[$message])) {
        // отправка
        echo $arr[$message];
    } else {
        // если $message не найден в массиве
        echo 'ничего не найдено';
    }
  • Как заменить теги при использовании clone()?

    @DanKud
    Genri_Rus, да, это именно из-за использования спецсимволов в строке. В данном случае +. Их нужно экранировать. Стандартной функции экранирования в JS нет, но можно использовать свою функцию. Сделайте так:
    /* добавьте функцию экранирования */
    function escapeRegExp(str){
        return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }

    измените внутри функции function actLocalStorage(data) следующее:
    .....
    if (current.match(escapeRegExp(data))) {
    .....
  • Как организовать в PHP проверку ключа массива в цикле foreach?

    @DanKud
    Владимир НЕО, я имел ввиду, чтобы вы показали как выглядит сам массив. Код в моем ответе делает тоже самое, что и написали вы, без всякого перебора. Я не понимаю, что вы вообще хотите. Вы задаете один и тот же вопрос каждый раз, при этом ответ на ваш вопрос давно уже написан. Если вам принципиально сделать это с помощью foreach то это делается так:
    $arr["привет"] = "здарова " . $_POST[avtor] . "";
    $arr["ты кто"] = "Я бармен :)";
    $arr["наливай"] = "" . $_POST[avtor] . " Пивка ?";
    $arr["бармен наливай"] = "Пивка ?";
    
    $message = 'наливай';
    
    if (array_search($message, array_keys($arr)) === false) {
        // если $message не найден в массиве
        echo 'ничего не найдено';
    } else {
        foreach ($arr as $key => $value) {
            if ($key == $message) {
                // отправка
                echo $value;
            }
        }
    }
  • Как организовать в PHP проверку ключа массива в цикле foreach?

    @DanKud
    Владимир НЕО, ну так покажите какая у вас конструкция массива. Вы вообще-то сами в своем вопросе именно такую конструкцию и написали, как у меня в ответе :)
  • Как организовать в PHP проверку ключа массива в цикле foreach?

    @DanKud
    Владимир НЕО, я же вам в сообщение именно это и написал. Выборка из ассоциативного массива по ключу + если нет совпадения выдавать другое сообщение. Перебор массива вам не нужен, можно просто обращаться к значению массива по ключу и этого будет достаточно. Что вам конкретно непонятно в том коде?
  • Из-за чего возникает ошибка "Call to a member function fetch_array() on boolean"?

    @DanKud
    Денис Давыденко, попробуйте $result->mysqli_fetch_all(MYSQLI_ASSOC) но вряд ли это что-то изменит. У вас SQL-запрос возвращает false по-этому нужно искать причину почему запрос неправильный.
  • Из-за чего возникает ошибка "Call to a member function fetch_array() on boolean"?

    @DanKud
    Потому что в переменной $result значение false из-за некорректного запроса. Уберите точку с запятой в конце SQL-запроса - SELECT * FROM credit
  • Как применить CSS к первому и предпоследнему div одного класса?

    @DanKud
    Раз 10 прочитал ваш вопрос. Вообще не понял, что вы хотите. Ну есть у вас 4 блока .column-center-center, которые вы написали, и что вы хотите от них?
  • Как применить CSS к первому и предпоследнему div одного класса?

    @DanKud
    Выложите HTML-код нужного куска в сообщение или на какой-нибудь codepen.io
    Никто не будет качать ваш файл, чтобы посмотреть код.
  • Нужны ли для cURL PHP какие-то особые прокси?

    @DanKud
    Попробуйте проверить корректность передаваемых данных прокси. Выведите их на экран перед отправкой запроса:
    $proxy_arr = explode(":", $proxy);
    print_r($proxy_arr);
  • Как заменить теги при использовании clone()?

    @DanKud
    Genri_Rus, в принципе у вас и так прописаны идентификаторы, которых для базовых задач будет достаточно - id="check-option-1". Пример с data-id это был просто пример. Я просто привык отделять собственную идентификацию элементов от дефолтной HTML, по-этому и добавил дополнительный атрибут data-id

    Вот так можно реализовать проставление чекбоксов:
    .....
    
    /* добавляем функцию для установки и записи чекбоксов в localStorage */
    function actChecked(id) {
      const checkedName = 'checked';
      let current = localStorage.getItem(checkedName);
    
      if (id === 'ready') { /* это условие опять же для того, чтобы проставить чекбоксы при загрузке страницы */
        if (current !== null) {
          /* перебираем каждый записанный в localStorage элемент и проставляем на нем чекбокс */
          JSON.parse(current).forEach(v => {
            $('#' + v).prop('checked', true);
          });
        }
        return;
      }
    
      if (current === null) { /* если чекбоксов еще нет в localStorage то делаем новую запись */
        return localStorage.setItem(checkedName, JSON.stringify([id]));
      }
    
      let arrCurrent = JSON.parse(current);
      const iof = arrCurrent.indexOf(id);
    
      if (iof !== -1) { /* если в localStorage уже есть записанные чекбоксы */
        arrCurrent.splice(iof, 1); /* удаляем его */
        return (arrCurrent.length === 0) ? localStorage.removeItem(checkedName) : localStorage.setItem(checkedName, JSON.stringify(arrCurrent));
      } else { /* иначе добавляем новый чекбокс в localStorage */
        arrCurrent.push(id);
        return localStorage.setItem(checkedName, JSON.stringify(arrCurrent));
      }
    }
    
    $(function() {
        actLocalStorage('ready');
        actChecked('ready'); /* добавим новую функцию в выполнение при загрузке страницы */
    });
    
    $('body').on('change', '.check', function(){
        var replace = '';
        var elements = $(this).parent().siblings('.copy, .copy-2');
        var modal = $('.modal');
    
        $(elements).each(function() {
          replace += this.outerHTML.replace(/(<|<\/)p/g, '$1span');
        });
    
        if ($('input').is(':checked')) {
            if (!modal.children().is('.item')) modal.html('');
        } else {
            modal.removeClass('modal-show').text('Здесь ничего нет');
        }
    
        var wrapReplace = '<div class="item">' + replace + '</div>';
        
        actChecked($(this).attr('id')); /* выполняем новую функцию, параметром передаем атрибут id текущего чекбокса */
        modal.html(actLocalStorage(wrapReplace)); 
      
        if ($(this).prop('checked')) {
          modal.addClass('modal-show');
        }
    });


    Да и конечно не забудьте обнулить все записи в localStorage, чтобы все корректно работало.
    Либо вручную, либо скриптом:
    $(function() {
        localStorage.removeItem('local');
        localStorage.removeItem('checked');
    });
  • Как заменить теги при использовании clone()?

    @DanKud
    После перезагрузки страницы, если снова начать активировать чекбоксы, то у меня все элементы начинают удаляться

    Это да, такое есть. Это как раз происходит из-за того, что мы не отмечаем какие чекбоксы уже прописаны в localStorage

    Получается все таки нужно стремиться к данному варианту ?

    Правильнее было бы к нему. Но главное просто добавить какие-то уникальные идентификаторы для элементов внутри модального окна.

    И разве нельзя сделать проверку типа:

    Ну у нас же не просто должна быть проверка ставить чекбокс или нет. Нужно проставить именно определенные чекбоксы.

    Чуть попозже напишу как можно отметить чекбоксы.
  • Как заменить теги при использовании clone()?

    @DanKud
    Не совсем понял на счет

    При клике на последний параграф - в модальном окне ничего не отображается

    у меня все нормально отображается при клике на любой чекбокс

    На счет пустого модального окна - подгруз данных из localStorage в этом коде сделан только при клике по чекбоксу. Если хотите, чтобы модальное окно заполнялось сразу же при загрузке страницы, нужно немного дописать код. Плюс вам по идее нужно отмечать записанные чекбоксы. И вот тут как раз появляется проблема проставления записанных в localStorage чекбоксов. Как мы будет определять какие чекбоксы нужно отмечать, если им не присвоены никакие уникальные идентификаторы? По-этому в этом примере это сделать довольно сложно. Вот код, который пропишет данные из localStorage в модальное окно при загрузке страницы, но чекбоксы он не проставит. Нужно переписывать весь код для этого.
    function actLocalStorage(data) {
      const localName = 'local';
      let current = localStorage.getItem(localName);
    
      /* добавим условие, что если параметром data мы передает строку 'ready' то нужно
      просто добавить данные из localStorage в модальное окно */
      if (data === 'ready') {
        if (current !== null) {
          return $('.modal').html(current);
        } else return;
      }
    
      if (current === null) {
        localStorage.setItem(localName, data);
        return localStorage.getItem(localName);
      }
    
      if (current.match(data)) {
        current = current.replace(data, '');
        if (current) {
          localStorage.setItem(localName, current)
        } else {
          localStorage.removeItem(localName);
        }
      } else {
        current = current + data;
        localStorage.setItem(localName, current);
      }
    
      current = localStorage.getItem(localName);
      return (current === null) ? '' : current;
    }
    
    $(function() { /* функция, которая выполнится при загрузке страницы */
        actLocalStorage('ready');
    });
    
    .....
  • Как перебрать массив?

    @DanKud
    Mestniydevil, если у вас массив на выходе выглядит так:
    var backgraunig = [
        [ '_bg1.jpg'],
        [ '_bg2.jpg'],
        [ '_bg3.jpg'],
        [ '_bg4.jpg'],
    ];

    то просто пересоберите его, чтобы работал код, который я написал, так будет удобнее:
    var backgraunig = [
        [ '_bg1.jpg'],
        [ '_bg2.jpg'],
        [ '_bg3.jpg'],
        [ '_bg4.jpg'],
    ];
    
    backgraunig = backgraunig.map(n => { return n[0] });
    
    const el = document.getElementById('el');
    
    el.style.backgroundImage = 'url("/img/' + backgraunig[0] + '")';
    
    el.addEventListener('click', function() {
        const currentURL = this.style.backgroundImage.match(/url\("\/img\/(.*?)"\)/)[1];
        const iof = backgraunig.indexOf(currentURL);
        const i = (iof === (backgraunig.length - 1)) ? 0 : (iof + 1);
        this.style.backgroundImage = 'url("/img/' + backgraunig[i] + '")';
    });
  • Как перебрать массив?

    @DanKud
    Mestniydevil, для чего у вас ссылки на картинки прописаны внутри массивов? Можно так:
    var backgraunig =[
        '_bg1.jpg',
        '_bg2.jpg',
        '_bg3.jpg',
        '_bg4.jpg',
    ];
    
    const el = document.getElementById('el');
    
    el.style.backgroundImage = 'url("/img/' + backgraunig[0] + '")';
    
    el.addEventListener('click', function() {
        const currentURL = this.style.backgroundImage.match(/url\("\/img\/(.*?)"\)/)[1];
        const iof = backgraunig.indexOf(currentURL);
        const i = (iof === (backgraunig.length - 1)) ? 0 : (iof + 1);
        this.style.backgroundImage = 'url("/img/' + backgraunig[i] + '")';
    });
  • Как думаете, почему не работает скрипт?

    @DanKud
    partyzanx, я не это имел ввиду. В общем попробуйте для начала так:
    вместо
    toggle.click(function (){
    пропишите
    toggle.on('click', () => {
  • Как думаете, почему не работает скрипт?

    @DanKud
    Элемент .hamburger добавляется на страницу динамически?