一键切换显示隐藏多个div

Toggle show hide for multiple divs with one button

我正在尝试通过一个按钮切换多个 div 与相同的 class。目前,只有第一个 div 正在做这项工作,其余的都被忽略了。我试图将 .getElementById 更改为 .getElementsByClassName 但它也没有成功。你能帮忙吗?这是我的代码。我从 2 天开始尝试。 :/

按钮代码:

<input onclick="change();myFunction()" type="button" value="Zeige Features" id="myButton1"></input>

单击“隐藏”/“显示”时更改按钮文本的代码(德语):

<script>function change() // no ';' here
{
    var elem = document.getElementById("myButton1");
    if (elem.value=="Zeige Features") elem.value = "Verstecke Features";
    else elem.value = "Zeige Features";
}</script>

问题应该出在这里。这是切换 div 的代码,但只有第一个 div 会这样做:

<script>function myFunction() {
  var x = document.getElementById("toggle-div");
  if (x.style.display === "block") {
    x.style.display = "none";
  } else {
    x.style.display = "block";
  }
} </script>

希望你能帮助我,谢谢!

这里有几个问题。 首先,您应该通过 class 获取您的元素:

 document.getElementsByClassName("name-of-toggle-divs-class");

这将 return 一个 HTMLCollection,因此您想将其转换为一个数组,如下所示:

Array.from(document.getElementsByClassName("name-of-toggle-divs-class"));

然后将样式更改应用于所有元素。正在恢复:

function myFunction(){
 const divArray = Array.from(document.getElementsByClassName("name-of-toggle-divs-class"));
 //Detecting the style you're going to use
 const displayStyle = divArray[0].display.style === 'block' ? 'none' : 'block';
 divArray.forEach(div => {
    div.style.display = displayStyle;
});

您应该使用 class 标识符,因为 id 会提示您只有一件商品。如果您有问题,请告诉我。

您也可以考虑将 class 从您定义 class 的项目中切换为:

 .div-of-toggle-divs-class{
   //some attributes
   display: block;
   &.invisible{
       display: none;
   }
  }

要做到这一点,只需遵循与上述相同的过程,并在 divArray 元素上使用 toggleClass 方法。试试这个:

<head>
     <style>
       .myClass {
             border: 1px solid black;
             margin-top: 2px;
             width: 100%;
        }
      </style>
      <script>
            function myFunction(){
            const divArray = 
            Array.from(document.getElementsByClassName("myClass"));
           //Detecting the style you're going to use
           const displayStyle = divArray[0].display.style === 'block' ? 'none' : 'block';
          divArray.forEach(div => {
          div.style.display = displayStyle;
         }); 
      </script>
</head>
<body>
        <div class="myClass"></div>
        <div class="myClass"></div>
        <div class="myClass"></div>
        <button type="button" onclik="myFunction()">CLICK ME</button>
</body>

删除 onclick 中的分号并添加 space.

//New code
<input onclick="change() myFunction()" type="button" value="Zeige Features" id="myButton1"></input>

Button 的文本在点击时很容易改变。

<script>
function change()
{
var elem = document.getElementById("myButton1"); 

    if (elem.value=="Zeige Features") elem.value = "Verstecke Features";
    else elem.value = "Zeige Features";

}//function closed
</script>

使用getElementsByClass,会给出一个数组,所以遍历数组,把每个div的样式一个一个改一下

<script>
function myFunction() 
{
  var x = document.getElementsByClass("toggle-div");

for( var i=0;i<x.length;i++)
{
  if (x[i].style.display === "block") {
    x[i].style.display = "none";
  } else {
    x[i].style.display = "block";
  }
}
} 
</script>

您也可以使用 for 以外的任何循环,或者您可以使用 map()

好的,

这很让人头疼,但我认为通过大量解决方法我解决了它。这就是我想要实现的目标。具有三个按钮和三个 div。当我单击一个按钮时,所有三个 div 都消失了,所有三个按钮都将文本更改为“隐藏”。再次点击时,反之。我希望这对那里的每个人都有帮助。我认为在 css 中触发所有“类”要容易得多。这是我在 java 脚本中的第一步,对我来说它和中文一样难(不要说 :))。

// Toggle all buttons texts

function change() {
  var x = document.querySelectorAll("#button");
  var i;
  for (i = 0; i < x.length; i++) {
    if (x[i].value == "Zeige Features") {
      x[i].value = "Verstecke Features";
    } else {
      x[i].value = "Zeige Features";
    }
  }
}

// Toggle show and hide divs

function showhide() {
  var x = document.querySelectorAll("#toggle-div");
  var i;
  for (i = 0; i < x.length; i++) {
    if (x[i].style.display === "block") {
      x[i].style.display = "none";
    } else {
      x[i].style.display =
        "block";
    }
  }
}
<!--Inserting 3 buttons-->

<input onclick="change();showhide()" type="button" value="Zeige Features" id="button"></input>
<input onclick="change();showhide()" type="button" value="Zeige Features" id="button"></input>
<input onclick="change();showhide()" type="button" value="Zeige Features" id="button"></input>

<!--Inserting 3 divs-->

<div id="toggle-div"> div 1 </div>
<div id="toggle-div"> div 2 </div>
<div id="toggle-div"> div 3 </div>

谢谢@pikachu_on_acid。你的方法是正确的,但我仍然有问题。不要怀疑当你想隐藏 div 时是否必须在开始时单击两次。在我的站点中,它们首先被隐藏,因此它们看起来像拳头。如果要反转,只需将 java 代码中的值从 "block" "none" "block" 更改为 "none" "block" "none" .

感谢您的帮助和问候!