Javascript 在单击时显示文本,然后在下次单击时关闭所有文本

标签 javascript onclick

此代码允许我单击一个链接并为每个链接显示一段文本,然后如果我单击相同的链接,相同的文本将再次隐藏。

   function reveal(id) {
   var e = document.getElementById(id);
   if(e.style.display == 'inline')
      e.style.display = 'none';
   else
      e.style.display = 'inline';   
}

但我想要的是当我再次点击时隐藏所有之前显示的文本。

最佳答案

为所有隐藏的文本元素设置一个通用类,要隐藏它们,您可以使用 document.querySelectorAll(".myClass"); 选择它们,循环遍历它们并隐藏每一个:

function reveal(id) {
  var e = document.getElementById(id);
  if (e.style.display == 'inline') {
    e.style.display = 'none';
  } else {
    var allTexts = document.querySelectorAll(".myHiddenText");
    for (var i = 0, len = allTexts.length; i < len; i++) {
      allTexts[i].style.display = 'none';
    }
    e.style.display = 'inline';
  }
}
.myHiddenText {
  display: none;
}
<a onclick="reveal('Text1');">reveal text 1</a>  <span class="myHiddenText" id="Text1">Hidden text 1</span>

<br/>
<a onclick="reveal('Text2');">reveal text 2</a>  <span class="myHiddenText" id="Text2">Hidden text 2</span>

<br/>
<a onclick="reveal('Text3');">reveal text 3</a>  <span class="myHiddenText" id="Text3">Hidden text 3</span>

<br/>
<a onclick="reveal('Text4');">reveal text 4</a>  <span class="myHiddenText" id="Text4">Hidden text 4</span>

关于Javascript 在单击时显示文本,然后在下次单击时关闭所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31140483/

相关文章:

javascript - 循环遍历数组以获取 map

javascript - 单击循环中的其他元素时触发单击事件

javascript - onclick 事件不触发 javascript

javascript - 从帮助列表中隐藏 nsfw 命令

javascript - ComboBox 无法在 ExtJS 的 EditorGridPanel 中工作

Javascript 动画滞后

javascript - JQueryMobile - AJAX - JSON 解析

javascript - onClick javascript 函数不起作用

onclick - 为什么 R# 在点击处理程序中告诉我 "Not all code paths return a value"?

function - 如何使用 vue.js 在 @click 事件上添加两个方法?