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);
}
не дебажил