2 回答

TA貢獻1794條經驗 獲得超8個贊
問題是因為您的代碼僅查看第一個 div 元素,以及所有 .child1 和 .child2 元素.
要解決此問題,請修改選擇器以根據是否存在(或缺少).boo 類進行選擇:
$('div.boo .child2').addClass('hide');
$('div:not(.boo) .child1').addClass('hide');
.hide { display: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
No boo
<span class="child1">
Child 1
<span class="child2">Child 2</span>
</span>
</div>
<div class="boo">
Boo
<span class="child1">
Child 1
<span class="child2">Child 2</span>
</span>
</div>
另請注意,如果這樣做僅是出于 UI 原因,那么您根本不應該使用 JS。單獨用CSS就可以實現:
div:not(.boo) .child1,
div.boo .child2 {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
No boo
<span class="child1">
Child 1
<span class="child2">Child 2</span>
</span>
</div>
<div class="boo">
Boo
<span class="child1">
Child 1
<span class="child2">Child 2</span>
</span>
</div>
最后請注意,您的 span
元素缺少結束標記。我認為這只是問題中的一個拼寫錯誤,因此我在此示例中更正了它。

TA貢獻2036條經驗 獲得超8個贊
為此,您不需要 jQuery:
let children = document.querySelectorAll('div.boo .child2, div:not(.boo) .child1');
for (var j = 0; j < children.length; j++) {
children[j].classList.add("hide");
}
您還錯過了 html 中的一些結束跨度標記,我假設這只是一個拼寫錯誤。
另外,如上所述,如果這只是一個演示問題,您可以使用簡單的 css 來完成此任務。
- 2 回答
- 0 關注
- 174 瀏覽
添加回答
舉報