在這個例子中,我必須點擊兩次才能看到Foo內容,但只需點擊一次就能看到Bar內容。唯一的區別是Foo content有內部樣式,Bar有內聯樣式。
<html>
<head>
<style>
.content {
display: none;
}
</style>
<script>
function showHide(element) {
sibling = element.nextElementSibling;
if (sibling.style.display == "none")
sibling.style.display = "block"
else sibling.style.display = "none";
}
</script>
</head>
<body>
<h1 onclick="showHide(this)">Foo</h1>
<div class="content">
Foo Content
</div>
<h1 onclick="showHide(this)">Bar</h1>
<div style="display: none;">
Bar Content
</div>
</body>
</html>
當您從JavaScript讀取sibling.style.display時,您將獲得該元素的內聯顯示樣式。當沒有內聯顯示樣式時,您會得到& quot"。您可以獲得計算的樣式,但是更好的通用解決方案是根本不要直接從JavaScript設置樣式,而是操作有意義的類:
function showHide(element) {
const sibling = element.nextElementSibling;
sibling.classList.toggle("content-hidden");
}
.content-hidden {
display: none;
}
<h1 onclick="showHide(this)">Foo</h1>
<div class="content-hidden">
Foo Content
</div>
<h1 onclick="showHide(this)">Bar</h1>
<div class="content-hidden">
Bar Content
</div>
問題是sibling.style.display引用的是樣式屬性,而不是元素的計算樣式。您會注意到,如果您再次單擊它,它會起作用,因為第一次單擊會設置要顯示的樣式:none,因此后續的單擊會使它可見。
但是您可以通過使用元素的classList切換一個使其可見的類來解決這個問題,如下例所示。
function showHide(element) {
sibling = element.nextElementSibling;
sibling.classList.toggle('visible')
}
.content {
display: none;
}
.visible {
display: block;
}
<h1 onclick="showHide(this)">Foo</h1>
<div class="content">
Foo Content
</div>
<h1 onclick="showHide(this)">Bar</h1>
<div class="content">
Bar Content
</div>
上一篇c語言打包json字符串
下一篇vue 讀取文件 校驗