I'm trying to use a recursive function to show/hide multiple nested UL/LI elements on the DOM.
I have a function which works for single nested, but I am trying to use a recursive function to control an x amount of nested elements.
Here is what I currently have:
HTML
<section data-range="true">
<input type="range">
<ul>
<li>Item one</li>
<li>Item two</li>
<ul>
<li>Nestd two-one</li>
<li>Nestd two-two</li>
<ul>
<li>Double-nested one</li>
</ul>
</ul>
<li>Item three</li>
</ul>
</section>
JS:
/* eventListener
* Attach an event listener to this element
*
* @param Object - Event object
*/
function eventListener(el) {
el.addEventListener('change', function(e) {
// List
else if (el.parentNode.children[1].nodeName == "UL" || el.parentNode.children[1].nodeName == "OL") {
updateList(e, el.value);
}
});
}
/* updateList
*
* @param Object - Event object
* @param Real - Range value (i.e. 3.2)
*/
function updateList(e, range) {
var target = e.srcElement || e.target;
var list = target.nextSibling.nextElementSibling;
var listNumber = list.childElementCount;
displayChildren(list, listNumber);
}
/* displayChildren
*
* @param Object - Event object
*/
function displayChildren(list, listNumber) {
for (var i = 0; i < listNumber; i++) {
if (list.children[i].nodeName != 'UL') {
list.children[i].style.display = (list.children[i].getAttribute('data-position') <= range) ? "":"none";
}
if (list.children[i].children.length > 0) {
displayChildren(list.children[i], list.children[i].childElementCount);
}
}
}
Here are some live examples:
Any helpful tips are appreciated.