我有一个基本网页,并创建了一个导航栏。导航栏上的每个标题都可切换一个分隔线,使其可见,其余分隔线则不可见。必须有一种更短,更简单,更有效的编码方法吗?
<script type='text/javascript'>
function Nav1(){
document.getElementById("Nav1").classList.add("Active");
document.getElementById("Nav2").classList.remove("Active");
document.getElementById("Nav3").classList.remove("Active");
document.getElementById("Nav4").classList.remove("Active");
document.getElementById("Div1").classList.remove("d-none");
document.getElementById("Div2").classList.add("d-none");
document.getElementById("Div3").classList.add("d-none");
document.getElementById("Div4").classList.add("d-none");
}
...
我正在使用d-none
隐藏分隔线,而Active
只是一个更改边框颜色的类。
我对javascript非常陌生,因此非常感谢您提供完整的解释。 (我在网页上使用Python和Flask。)
答案 0 :(得分:1)
您的HTML结构:
.divider
。.divider
一个唯一的ID。id
,它是唯一的id
要使用该按钮切换的分隔线。现在适用于CSS:
divider
的元素应该被隐藏,除非它们也具有一个类别
visible
。还有您的JS:
showDivider
函数选择所有类为divider
的元素,然后对其进行迭代(循环)。visible
,否则将其删除(如果已经有)。这是一个完整的例子:
function showDivider(id) {
// Select all elements with class 'divider'.
document.querySelectorAll('.divider')
.forEach(divider => {
// for each element:
// if this divider has the passed id.
if (divider.getAttribute('id') === id) {
// add the class 'visible' to it.
divider.classList.add('visible')
} else {
// if not, remove class 'visible' from it.
divider.classList.remove('visible')
}
})
}
/* Elements with class "divider" should be hidden. */
.divider {
display: none;
}
/* Elements with both class "divider" & "visible" should be visible. */
.divider.visible {
display: block;
}
<button onclick="showDivider('a');" >Show Divider A</button>
<button onclick="showDivider('b');" >Show Divider B</button>
<button onclick="showDivider('c');" >Show Divider C</button>
<hr>
<div id="a" class="divider">
Hello Content A!
</div>
<div id="b" class="divider">
Hello Content B!
</div>
<div id="c" class="divider">
Hello Content C!
</div>
如果您希望在页面加载时看到类divider
的任何元素,只需将visible
类显式添加到它,如下所示:
<div id="a" class="divider visible">
Hello Content A!
</div>
<div id="b" class="divider">
Hello Content B!
</div>
<div id="c" class="divider">
Hello Content C!
</div>
答案 1 :(得分:0)
您可以使用以下关键字将当前元素传递给函数:
Nav1(this)
现在,您可以使用ID的最后一个字符并选择所有Navs和Divs。
function Nav1(ele){
var eleIdFinalNumnber = this.id.substr(-1);
document.querySelectorAll('[id^=Nav]').forEach((ele) =>
(ele.id.substr(-1) == eleIdFinalNumnber) ? ele.classList.add("Active") : ele.classList.remove("Active")
);
document.querySelectorAll('[id^=Div]').forEach((ele) =>
(ele.id.substr(-1) == eleIdFinalNumnber) ? ele.classList.remove("d-none") : ele.classList.add("d-none")
);
}