作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我搜索过相同的问题,但只找到了 jQuery 解决方案,但我想只使用 JS 来解决。
我有多个具有相同类名的 div
和多个 a
标签。我希望当用户按下与 div
关联的 a
元素时显示信息。
这是我的函数。我创建了 2 个循环:一个用于 a
元素,第二个用于 div
s。
function toggle() {
var ele = document.getElementsByClassName("toggleText");
var btn = document.getElementsByClassName("displayText");
for(var i=0; i<btn.length; i++){
for(var j=0; j<ele.length; j++){
btn[i].onclick = function(){
if(ele[j].style.display == "none") {
ele[j].style.display = "block";
}
else {
ele[j].style.display = "block";
}
}}}}
.displayText {
display: none;
}
<a class='toggleText' href="javascript:toggle();">Show1</a>
<div class='displayText'>
Text1
</div>
<a class='toggleText' href="javascript:toggle();">Show2</a>
<div class='displayText'>
Text2
</div>
<a class='toggleText' href="javascript:toggle();">Show3</a>
<div class='displayText'>
Text3
</div>
<a class='toggleText' href="javascript:toggle();">Show4</a>
<div class='displayText'>
Text4
</div>
我的代码有什么问题?
最佳答案
编辑
@cirix 引起了我的注意,我的原始代码由于使用 nextElementSibling
而中断。没有必要的预防措施来终止兄弟链。如果单击最后一个 div,它就像编辑之前一样 nextElementSibling
将报告 null,因为最后一个元素永远不会有下一个兄弟元素(这就是 last ...last 的原因)。
有两个变化:
event.target
处理的是<a>
anchor ,从而解决问题。classList.add/remove
并将它们替换为 classList.toggle()
,这是一种改进,而不是修复。通过将所有元素包装在一个元素中来使用事件委托(delegate)。然后在上面注册点击事件。通过更多的设置,您将能够仅使用一个 eventListener 来控制任意数量的链接。代码段中注释的详细信息。
片段
// Reference the parent element
var main = document.getElementById('main');
/* Register main to the click event
|| when clicked ANYWHERE within main
|| toggle() is called
*/
main.addEventListener('click', toggle, false);
function toggle(e) {
/* Determine if the current element in the
|| event chain is the anchor that was
|| clicked.
*/
if (e.target !== e.currentTarget && e.target.nodeName === "A") {
/* tgt is the clicked link
|| txt is the div that follows tgt
*/
var tgt = e.target;
var txt = tgt.nextElementSibling;
// Toggle classes .on and .off
txt.classList.toggle('on');
txt.classList.toggle('off');
}
}
.off {
display: none;
}
.on {
display: inline-block;
}
<section id='main'>
<a class='toggleText' href="#/">Show1</a>
<div class='displayText off'>
Text1
</div>
<a class='toggleText' href="#/">Show2</a>
<div class='displayText off'>
Text2
</div>
<a class='toggleText' href="#/">Show3</a>
<div class='displayText off'>
Text3
</div>
<a class='toggleText' href="#/">Show4</a>
<div class='displayText off'>
Text4
</div>
</section>
关于javascript - 显示/隐藏具有相同类名的多个 Div (javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42913879/
所以我有这个 UltraTicTacToe 游戏,我正在用 HTML/CSS/JS 编码。它由表中表中的表组成。当您单击 X 或 O 时,我想要突出显示您应该进入的下一个 TicTacToe 牌 ta
Some text Some more text 如何让每个 .example 的 .whatever 包含其 .test 的内容? 例如,如果代码是这样的: Som
我是一名优秀的程序员,十分优秀!