我有一个很长的列表项目列表(通过API生成),我想通过单击显示/隐藏一些项目,类似手风琴效果.
默认情况下,我想隐藏的列表项有P-item个类,它们上面的M-item个类应该触发它们显示出来.
以下是我的标记:
<li class="session-item M-item"></li>
<li class="session-item P-item"></li>
<li class="session-item P-item"></li>
<li class="session-item G-item"></li>
P项是其父M项的子项.因此,在上述示例中,默认情况下,应隐藏两个P项,并显示M项和G项.单击M项时,将显示两个隐藏的P项.在上面的示例中,我只列出了4个项目,但列表还在继续,这种关系之间的唯一分隔符是G项目.
我成功了,但它只显示/隐藏了M-item的第一个直接sibling ,我使用了nextElementSibling
,如下所示:
var acc = document.getElementsByClassName("M-item");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function () {
this.classList.toggle("active");
var panel = this.nextElementSibling;
if (panel.style.display === "block") {
panel.style.display = "none";
} else {
panel.style.display = "block";
}
});
}
Select 具有P项的所有同级项,然后断开,查找另一个M项并重复的最佳方法是什么?
Vanilla JS中是否有类似于nextAll();
的东西?我是否需要while
循环来迭代下一个同级循环?
下面是我的完整标记的样子: