我在Jquery的第12天偶然发现了:not()选择器。
我想选择除了一个之外的所有H1,其中包括文本和包含更多文本的类的跨度。为了帮助您理解结构,以下是一些查询和结果:
查询1:
$('.block > section')
结果:
[
<section class="businessapproaches">…</section>
,
<section class="abstract">…</section>
,
<section class="workexperience">…</section>
,
<section class="academic">…</section>
,
<section class="skillstable">…</section>
]
查询2
$('.block > section > h1')
结果:
[
<h1>Business Approach</h1>
,
<h1>Abstract</h1>
,
<h1>Work Experience</h1>
,
<h1>Academic Experience</h1>
,
<h1>…</h1>
]
如您所见,最后一个没有要排除的简单文本。所以你知道它是什么,这里是:
[
<h1>
"Skills Table : "
<span class="skillstablevisibility">Technologies / Compliance / Certifications</span>
</h1>
]
对于那些即将建议使用:last
的人,我非常感谢,但我想了解如何使用:not()
选择器解决此问题,因为我可能会附加一个明天的另外一节,从而否定:last
。好消息是,在我添加新部分之后,我可以保证我仍然需要选择除“技能表”之外的所有部分,所以你的帮助不会浪费!
这是我到目前为止所尝试的:
尝试使用其索引:
$('.block > section > h1:not(:'$('.block > section > h1:nth-child(5)')')')
尝试使用其名称:
$('.block > section > h1:not(:"Skills Table : "
<span class="skillstablevisibility">Technologies / Compliance / Certifications</span>')')
答案 0 :(得分:4)
你可以做到
$('.block > section > h1:not(:has("span.skillstablevisibility"))')
这不会选择其中包含h1
的任何span.skillstablevisibility
。
演示: http://jsfiddle.net/joycse06/uZjJh/
<强>更新强>
如上所述@Christian Varga,上面的选择器表达式很昂贵,所以如果你可以控制标记创建你可以将类添加到h1
本身,这将允许像
$('.block > section > h1:not(.skillstable)');
性能会更好。
如果你不能改变标记你总是可以使用第一个。