根据点击显示和隐藏多个 Div
2022-08-18
1324
嗨,我有一段代码需要根据 ID 隐藏和显示 div。这行得通,但问题是我需要能够隐藏页面上具有相同 ID 的其他 DIVS。
我知道 ID 应该是唯一的,但是当我尝试使用 querySelectorAll 时,我的控制台显示
未捕获 TypeError:无法设置未定义的属性(设置“display”)“
未捕获 TypeError:无法读取未定义的属性(读取“className”)
我也很难只显示第一个选项卡,现在所有内容都会显示,直到单击按钮。
编辑:我找到了一个围绕容器元素的解决方案,它不是理想的解决方案,以防以后添加某些东西,但它有效。
仍然希望看到一个可以学习的解决方案,但感谢那些提供帮助的人。
<div class="swapMenuBlock">
<ul class="side bar tabs" id="tab">
<li class="tabButton" id="tabs1" onclick="showStuff('IV')">Ivs</li>
<li class="tabButton" id="tabs2" onclick="showStuff('Injection')">Injections</li>
<li class="tabButton" id="tabs3" onclick="showStuff('NAD')">NAD</li>
</ul>
<script type="text/javascript">
// Get the tab element
var btnContainer = document.getElementById("tab");
// Get all buttons inside with tabbutton
var btns = btnContainer.getElementsByClassName("tabButton");
// Loop through the buttons and add the active class to the current/clicked button
for (var i = 0; i < btns.length; i++) {
btns[i].addEventListener("click", function() {
var current = document.getElementsByClassName("active");
current[0].className = current[0].className.replace(" active", "");
this.className += " active";
});
}
// Toggle displays
function showStuff(id) {
document.getElementById("IV").style.display = "none";
document.getElementById("Injection").style.display = "none";
document.getElementById("NAD").style.display = "none";
document.getElementById(id).style.display = "block";
}
</script>
</div>
2个回答
Bug 的原因:-
当您的点击处理程序首次运行并搜索包含
active
类的标签时,会获取一个空数组,因为 html 没有带有 active 类的标签。
现在
var current = [];
current[0] = undefined;
current[0].className =(undefined).className;
//and the console is showing you this error.
//Uncaught TypeError:
//Cannot read properties of undefined (reading 'className')
解决方案 :-
只需将
active
类手动添加到任何一个
li
标签即可。
像这样:-
<ul class="side bar tabs" id="tab">
<li class="tabButton" id="tabs1" onclick="showStuff('IV')">Ivs</li>
<li class="tabButton" id="tabs2" onclick="showStuff('Injection')">Injections</li>
<li class="tabButton active" id="tabs3" onclick="showStuff('NAD')">NAD</li>
</ul>
Abhay
2022-08-18
ID 必须是唯一的。相反,为应该一起显示/隐藏的元素赋予相同的 CSS 类。然后,您可以查询具有该类的所有元素并显示/隐藏它们。
示例:
let foos = document.querySelectorAll(".foo")
document.querySelector("button").addEventListener("click", function() {
foos.forEach(function(el){
el.classList.toggle("hidden");
});
});
.hidden { display:none; }
<button>Toggle</button>
<div class="foo">foo</div>
<div class="fooBar">fooBar</div>
<div class="foo">foo</div>
<div class="fooBar">fooBar</div>
<div class="foo">foo</div>
<div class="fooBar">fooBar</div>
<div class="foo">foo</div>
<div class="fooBar">fooBar</div>
<div class="foo">foo</div>
Scott Marcus
2022-08-18