Ваш код работает!Проблема не в том, что брат, а в том, что вы не можете установить высоту CSS равной нулю
var accordions = document.getElementsByClassName("foot-nav-heading");
for (var i = 0; i < accordions.length; i++) {
accordions[i].onclick = function() {
this.classList.toggle('is-open');
var content = this.nextElementSibling;
if (content.style.maxHeight != "0px") {
// accordion is currently open, so close it
content.style.maxHeight = "0px";
} else {
// accordion is currently closed, so open it
content.style.maxHeight = "200px";
}
}
}
<div class="foot-nav-heading">Click me!</div>
<div class="textwidget">
<ul class="quick-link accordion-content">
<li>Test</li>
</ul>
</div>
Here is the javascript code:
<div class="foot-nav-heading">Click me!</div>
<div class="textwidget">
<ul class="quick-link accordion-content">
<li>Test</li>
</ul>
</div>
Here is the javascript code:
РЕДАКТИРОВАТЬ :
То, что вы пробовали с вашим кодом, это получить nextSibling .Но у вас могут быть дополнительные текстовые узлы с возвратом каретки. Попробуйте этот фрагмент:
document.querySelectorAll(".textwidget")[0].childNodes.forEach(function(el){
console.log(el.nodeName,el.nodeType);
});
<div class="foot-nav-heading">Click me!</div>
<div class="textwidget">
<ul class="quick-link accordion-content">
<li>Test</li>
</ul>
</div>
Поэтому попытка нацеливания напрямую была бы рискованной (в вашем примере вы можете получить то, что вы хотите с помощью content.childNodes[1]
, но это опасно, если вы не знаетекак написан HTML. Это может быть content.childNodes[0]
без возврата каретки).Поэтому лучший вариант - это проанализировать childNodes и установить переменную или элементы push в массиве, когда они полностью выполнят условие.в вашем случае:
var ul;
content.forEach(function(el){
if (el.nodeName === 'UL') ul = el;
}
или создайте массив из списка узлов для фильтрации нужного узла:
var ul = Array.from(document.querySelectorAll(".textwidget")[0].childNodes).filter(function(el) {if(el.nodeName == 'UL') return el});
// or use es6 features
// var ul = [...document.querySelectorAll(".textwidget")[0].childNodes].filter(e => e.nodeName == 'UL');
console.log(ul[0]);
<div class="foot-nav-heading">Click me!</div>
<div class="textwidget">
<ul class="quick-link accordion-content">
<li>Test</li>
</ul>
</div>