Javascript:单击一个时关闭所有手风琴?

时间:2016-11-30 13:54:27

标签: javascript

我基本上试图关闭所有的手风琴,只保持其中一个被点击。

因此,在短期内,只保持一个标签打开。

这是我到目前为止所做的:

https://jsfiddle.net/gymzfg9r/2/

这是javascript:

var acc = document.getElementsByClassName("accordion");
var i;

for (i = 0; i < acc.length; i++) {
    acc[i].onclick = function(){
        this.classList.toggle("active");
        this.nextElementSibling.classList.toggle("show");
  }
}

有人可以就此提出建议吗?

2 个答案:

答案 0 :(得分:1)

为其他人插入代码:

  this.classList.toggle("active");

  var arr = document.getElementsByClassName("show");
  for (j = 0; j < arr.length; j++) {
      if(this.nextElementSibling != arr[j])
         arr[j].classList.toggle("show");
  }


  this.nextElementSibling.classList.toggle("show");

答案 1 :(得分:1)

这样做了,但我很确定这是一种可怕的方式来做到这一点,现在不能回想一个更好的方法

var acc = document.getElementsByClassName("accordion");
var i;    

function closeEverything() {
    var openElements = document.getElementsByClassName("active");
  if(openElements.length) {
    for(var i = 0; i < openElements.length; i++) {
        openElements[i].nextElementSibling.classList.toggle("show");
        openElements[i].classList.toggle("active"); 
     }
    }
}

for (i = 0; i < acc.length; i++) {
    acc[i].onclick = function(){
            if(this.classList.contains('active')) {
            this.classList.toggle('active');
            this.nextElementSibling.classList.toggle('show');
        } else {
                closeEverything();
            this.classList.toggle("active");
            this.nextElementSibling.classList.toggle("show");
        }
    }
}