jQuery中是否有类似于:eq()的标准CSS选择器?
我不知道是否有CSS选择器可以执行与以下行相同的操作(jQuery代码): 我在CSS中尝试过如下内容:jQuery中是否有类似于:eq()的标准CSS选择器?,jquery,css,jquery-selectors,css-selectors,Jquery,Css,Jquery Selectors,Css Selectors,我不知道是否有CSS选择器可以执行与以下行相同的操作(jQuery代码): 我在CSS中尝试过如下内容: .tab_cadre_central .top::nth-child(0) table tbody tr td table tbody nth-child:eq(3) { display:none; } 但是它不起作用。当jQuery的:eq()使用基于0的索引时,:nth-child()使用基于1的索引,因此您需要适当地增加索引: .tab_cadre_central .top:
.tab_cadre_central .top::nth-child(0) table tbody tr td table tbody nth-child:eq(3) {
display:none;
}
但是它不起作用。当jQuery的:eq()
使用基于0的索引时,:nth-child()使用基于1的索引,因此您需要适当地增加索引:
.tab_cadre_central .top:nth-child(1) table tbody tr td table tbody tr:nth-child(4)
但是你真的应该考虑重构选择器
⚠ 值得注意的是,尽管:eq()
和:nth-child()
的行为类似,但它们肯定不一样:eq()
将选择集合中的第n+1个元素,而:n-child()
将选择集合中作为其各自父元素的第n个子元素的所有元素。⚠
<div>
<span></span>
<span></span>
</div>
<div>
<span></span>
</div>
选择器div span:nth child(1)
将获取两个元素,而div span:eq(0)
将仅选择一个。顶部答案仅在非常严格的环境和有限的HTML结构下有效当您试图通过CSS类或其他特性选择元素时,它将导致问题。让我用下面的代码来解释:
<div class="divWrapper">
<div>1</div>
<div>2</div>
<div>3</div>
<br>
<div>4</div>
<div>5</div>
<div>6</div>
<br>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
这是因为即使我们选择了div的子级,:nth-child()
实际上不仅将div计算在内,还将该范围内的所有HTML元素计算为有效子级,因此上面的代码将第6个div而不是第7个div,因为它将介于两者之间的
标记视为有效子级。如果要添加新的HTML元素,这会使事情变得非常混乱,并破坏网站的预期设计
这就是为什么我建议使用:nth-of-type()
,如果您试图以CSS类或其他属性为目标,就像jQuery中的:eq()
一样
这就是工作:
.divWrapper > div:nth-of-type(7) {
background: lightblue;
}
您可以在这个代码笔中看到这个例子:或者您可以直接在这个答案上运行代码
希望这有帮助
.divWrapper{
宽度:100%;
文本对齐:居中;
}
.divWrapper>div{
颜色:白色;
宽度:50px;
高度:20px;
背景:黑色;
显示:内联块;
边缘:.5em;
}
/*我们用diving包装纸将第一个div涂成绿色。很好!到目前为止*/
.divWrapper>div:n个子项(1){
背景:绿色;
}
/*我们试着把第七节漆成红色。它不起作用,因为我们的选择器不仅考虑了divWrapper的子类的所有div,还考虑了作为divWrapper子类的HTML标记的
标记*/
.divWrapper>div:n个子项(7){
背景:红色;
}
/*使用第n个类型,我们的选择器会绘制第7个div*/
.divWrapper>div:n类型(7){
背景:浅蓝色;
}
1.
2.
3.
4.
5.
6.
7.
8.
9
我同意,这看起来确实有点乏味,这不是唯一的区别。事实上,除非HTML受到极大的限制,否则该选择器可能会匹配更多的元素,甚至根本不匹配。OP需要确保他们自己的HTML实际上与两个选择器都匹配。@BoltClock添加了一个警告-我之前已经考虑过,可能应该这样做,因为对于不熟悉它的人来说,差异非常微妙。因此eq:(0)将选择第二个span标记,因为它是n+1。。对吗?@ImranBughio No,:eq(0)
将选择第一个div中的第一个span元素。:n子元素(1)
将选择每个div中的第一个span元素。我的答案中的措辞似乎很糟糕。要回答您的问题标题,不,jQuery中没有与:eq()
等效的标准CSS。看见
.divWrapper > div:nth-child(7) {
background: lightblue;
}
.divWrapper > div:nth-of-type(7) {
background: lightblue;
}