Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery中是否有类似于:eq()的标准CSS选择器?_Jquery_Css_Jquery Selectors_Css Selectors - Fatal编程技术网

jQuery中是否有类似于:eq()的标准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:

我不知道是否有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: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;
}