некоторые узлы таблицы не скрываются по нажатию

У меня есть многомерный массив, который я получаю через api. Я его вывожу через таблицы.Вот код:

function generHTMLRec($arr){
    
    echo "<ul>";
    foreach ($arr as $key => $value) {
        if(is_array($value)){
            echo "<li> <div class = \"key\"> $key: </div> ";
            generHTMLRec($value);
            echo "</li>";
        }
        else{
            if($key == "id"){
                
            }
            else if($key == "image"){
                echo "<li class = \"$key\"> <img src = \"$value\" width = \"50px\" height = \"50px\">  </li>";
            }
            else {
                echo "<li class = \"$key\"> <span class = \"key\"> $key: </span>  $value </li>";
            }
        }
    }
    echo "</ul>";
    
}

Получается таблица, элементы которой могут содержать другие таблицы(вложенность). Я хочу реализовать логику скрытия/открытия элементов, которые содержат в себе другие вложенные элементы . Все элементы, которые можно скрыть/открыть я пометил классом "drop-down" по сути проверив, есть ли в них тег "ul". Далее, на все такие элементы я повесил событие клика. По клику я получаю родителя, то есть тот тег "li", который я хочу скрыть/показать, от него получаю всех потомков, в цикле от 1 прохожусь по потомкам(от единицы потому что первый элемент - строчка с названием, которую скрывать не нужно), и если они не содержат класса "hidden",то добавляю его. Если же содержат(значит мы хотим раскрыть список),то класс "hidden" удаляется. В общем, это работает, но не для всех узлов, некоторые элементы просто не скрываются, получается так, что в первый if программа заходит, но не добавляет класс "hidden" и я не могу понять почему. Код js:

 var obj_list = document.querySelector('.search'),
    objs_list_li = obj_list.querySelectorAll('li');

    // Перебираем все li в #list
    for (var i = 0; i < objs_list_li.length; i++) {
        // Получаем список ul находящиеся в li
        var objs_li_ul = objs_list_li[i].querySelectorAll('ul');

        // Если li имеет ul, то применяем к заголовку стиль
        if (objs_li_ul.length) {
            
            objs_list_li[i].querySelector(".key").classList.add('drop-down');

            objs_list_li[i].addEventListener('click', function(ev){
                arrElements = ev.target.parentNode.getElementsByTagName('*');
               
                    for (let i = 1; i < arrElements.length; i++) {
                        if(!arrElements[i].classList.contains('hidden')){
                            
                            arrElements[i].classList.add('hidden');
                        }
                        else{
                            arrElements[i].classList.remove('hidden');
                    }
                }
                
                
                    // }
                    
                
            })
        };
    };
   


Получившаяся таблицаПример элемента, который правильно скрывается/открываетсяПример элемента, который не скрывается 1 скрин - пример таблицы, 2 - пример элемента, который правильно скрывается и открывается, 3 - который не скрывается, хотя "items" внутри него работает исправно.


Ответы (0 шт):