javascript - 如何使用 JavaScript “循环”通过元素(显示/隐藏)?
问题描述
我有一个包含以下元素的页面:
<div id="1" style="display: block;">
[...]
</div>
<div id="2" style="display: none;">
[...]
</div>
<div id="3" style="display: none;">
[...]
</div>
<button id="next" onclick="ScrollNext()">
<button id="previous" onclick="ScrollPrevious()">
当用户单击“下一步”时,我想确定哪个 [div] 当前显示为“显示:块;” 将那个 [div] 的样式修改为“display: none;”,然后将下一个连续的 [div] 的样式修改为“display: block;” (当然,当用户单击“上一个”按钮时,我想做相反的事情)
我知道如何为按钮编写代码以这种方式切换单个元素,但是如何以编程方式确定要修改哪个元素的样式?
解决方案
我有一个使用 JavaScript 的实现,如下所示。div
为了观察变化,我给了不同的颜色。我们基本上利用nextElementSibling
和的previousElementSibling
属性Node
来向前和向后循环。找到当前的可见节点只是一个.find
距离。
const divs = [...document.querySelectorAll('.container')];
function getVisibleDiv() {
const visibleDiv = divs.find(div => div.style.display === 'block');
return visibleDiv;
}
function next() {
const visibleDiv = getVisibleDiv();
visibleDiv.style.display = 'none';
if (visibleDiv.nextElementSibling?.className === 'container')
visibleDiv.nextElementSibling.style.display = 'block';
else {
divs[0].style.display = 'block';
}
}
function previous() {
const visibleDiv = getVisibleDiv();
visibleDiv.style.display = 'none';
if (visibleDiv.previousElementSibling?.className === 'container')
visibleDiv.previousElementSibling.style.display = 'block';
else {
divs[divs.length - 1].style.display = 'block';
}
}
.container {
width: 100px;
height: 100px;
background: green;
}
.container:nth-child(2) {
background: orange;
}
.container:nth-child(3) {
background: yellow;
}
<div id="1" class='container' style="display: block;">
</div>
<div id="2" class='container' style="display: none;">
</div>
<div id="3" class='container' style="display: none;">
</div>
<button id="next" onclick="next()">Next</button>
<button id="previous" onclick="previous()">Prev</button>
推荐阅读
- mysql - 实现 async/await node.js 和 mysql
- css - CSS/SCSS - 除了最后一个元素之外的所有元素(未按预期工作)
- docker - SimpleSAMLphp 作为 idp:找不到元数据
- powershell - 如何使用Powershell检查电子邮件是否已发送
- angular - 使用@ngrx/entity,如何更新项目数组
- bash - shell脚本中if语句的问题
- arrays - 如何修复:排序方法
- javascript - 如何检查子类是否已覆盖父方法/函数?
- ibm-midrange - 如何使用 qmhrcvpm api
- node.js - 我无法在 Loopback ORM 模型中设置唯一字段