[英]Simple mind-blowing thing; CSS selectors vs jQuery selectors
CSS選擇器:not()不起作用,而jQuery :not不起作用。 考慮以下結構:
<div class="main">
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
</ul>
<div>
<div class="doc-view">
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
</ul>
</div>
</div>
這個簡單的CSS:
li:not(.doc-view li) {
color:green;
}
還有一些jQuery:
$('li:not(.doc-view li)').css('color','red');
如您所見,選擇器是相同的。 但是,如果您使用jsFiddle,您會發現兩者並不相同。 jQuery選擇器定位元素,而CSS不定位。
編輯:
問題是:
如何定位頁面上的所有<li>,除了.doc-view容器中的那些?
這是因為它們含義不同。 讓我們從CSS開始。
li:not(.doc-view li)
這意味着選擇所有列表項,但不選擇那些具有子類的后代,這些子類具有帶有列表項后代的doc-view類。 您的代碼沒有這些,加上只允許將簡單的選擇器與:not()
,因此選擇器仍然無效。
現在使用jQuery。
$('li:not(.doc-view li)')
這表示選擇所有列表項,但在該集合中不包括帶有doc項的帶有列表項后代的任何元素。 之所以有效,是因為它首先選擇了所有列表項,然后刪除了適合:not(.doc-view li)
選擇器的匹配元素組。
由於.doc-view
是對div
,你需要使用的否定div
,然后訪問li
。
因此,純CSS解決方案是:
ul > li {
color: red;
}
div:not(.doc-view) > ul > li {
color:green;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.