Как оптимизировать данный код php + js?

Здравствуйте, в шаблоне страницы есть кусок кода, добавляющий отфильтрованные значения в скрытое поле для дальнейшей передачи их ajax-запросом. Проблема в том, что этот код повторяется несколько раз да и вообще выглядит весьма коряво. Как можно его переписать на чистый js или какие вообще могут быть здесь варианты для оптимизации
<?php if (isset($mech_names) && $mech_names != "") { ?>
    <?php foreach ($mech_names as $mech_name1) { ?>
        <?php if ($mech_name1 == "") { continue; } ?>
        $('.mech-check-class').each(function(){
            if ($(this).val() == "<?= $mech_name1; ?>") {
                $(this).addClass("active-color");
                $(this).parent().addClass("active");
            }
        });
    <?php } ?>
<?php } ?>

$mech_names - php массив добавляемых в скрытое поле значений для фильтрации
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
@artalexs Автор вопроса
В js-файл вынес эту функцию
function addList(arr, thisClass) {
    if (Array.isArray(arr) && arr.length) { 
        arr.forEach(function(value, index) {
            $('.' + thisClass + '-check-class').each(function(){
                if ($(this).val() == value) {
                    $(this).addClass("active-color");
                    $(this).parent().addClass("active");
                }
            });
        })
    }
}


В шаблоне оставил такой код
<?php if (!empty($color_names)) { ?>
    let arr = <?= json_encode($color_names); ?>,
        thisClass = 'color';
    addList(arr, thisClass);
<?php } ?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
glaphire
@glaphire Куратор тега PHP
PHP developer
1)isset($mech_names) && $mech_names != "" можно заменить на !empty($mech_names)
2) если в шаблонах приходится использовать чистый php, а не шаблонизатор, то надо использовать Альтернативный синтаксис управляющих структур для нормальной читаемости.
3) чтобы не гонять each на каждый $mech_name1, то можно находить элемент по value (примеры).

Фильтровать массивы на наличие пустых элементов можно этой функцией без колбека на бекенде до передачи шаблону, чтобы не дублировать эту проверку везде.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы