Показать сообщение отдельно
  #4 (permalink)  
Старый 19.05.2019, 14:02
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

2 варианта: без рекурсии, с рекурсией
function setNodeLevel(node, level) {
    node.setAttribute('data-level', level);
}

// без рекурсии: для каждого '.subsections' подсчитываем уровень
function setLevels(parent, topLevel) {
    var s = parent.querySelectorAll('.subsections');
    for (var i = 0; i < s.length; ++i) {
        var subsections = s[i];
        var level = topLevel;
        for (var node = subsections.parentNode; node && node != parent; node = node.parentNode) {
            if (node.classList.contains('subsections')) {
                level++;
            }
        }
        setNodeLevel(subsections, level);
        var children = subsections.children;
        for (var j = 0; j < children.length; ++j) {
            setNodeLevel(children[j], level);
        }
    }
}

// с рекурсией
function setLevels(parent, topLevel) {
    var subsections = parent.querySelector('.subsections');
    if (!s) {
        return;
    }
    setNodeLevel(subsections, topLevel);
    var children = subsections.children;
    for (var j = 0; j < children.length; ++j) {
        setNodeLevel(children[j], topLevel);
        setLevels(children[j], topLevel + 1);
    }
}

// использование
var d = document.querySelectorAll('.category-list > .one-section.parent');
for(let i = 0;i < d.length; i++) {
    setLevels(d[i], 1);
}


не дебажил
Ответить с цитированием