在 Chrome 中嵌套 nth-child 的 querySelector 似乎不起作用

Posted

技术标签:

【中文标题】在 Chrome 中嵌套 nth-child 的 querySelector 似乎不起作用【英文标题】:querySelector with nested nth-child in Chrome doesn't appear to work 【发布时间】:2011-09-14 18:42:14 【问题描述】:

我一直在研究在 nth-child 选择器中使用 nth-child 来查找元素。这似乎适用于 Firefox,但似乎不适用于 chrome。这是我的测试文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>untitled</title>
    <!--[if IE]>
        <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <script type="text/javascript" charset="utf-8">
        myFunc = function() 
            if(document.querySelector('#wonderful DIV:nth-child(2) DIV:nth-child(2)')) 
                alert("found the element");
             else 
                alert("element not found");
            
        ;
    </script>
</head>
<body onLoad="myFunc()">

    <div id="wonderful">
       <div>
       </div>
       <div >
           <div>
           </div>
           <div class="blue">
               find me!
           </div>
       </div>
    </div>

</body>
</html>

有其他人看到这个问题吗?有解决办法吗?

【问题讨论】:

【参考方案1】:

这在 chrome 中对我有用,但在 FF 中不起作用。

document.querySelector('#wonderful div:nth-child(2):nth-child(2)')

以下截图适用于两种浏览器,但我想你已经知道了

document.querySelector('#wonderful div:nth-child(2) div.blue')

所以对我来说,这看起来像是 chrome 中的实现失败。

【讨论】:

是的,非常有趣。第一个没试过,第二个就知道了。如果能在不使用 XPath 的情况下使用跨浏览器的方式来执行此操作,那就太好了。 你的第一个 sn-p 没有意义。嗯,确实如此,但:nth-child(2):nth-child(2):nth-child(2) 相同... @BoltClock 你是对的,这没有意义,但它有效。这就是为什么我认为这是 chrome 中的一个实现错误。 @DanielB 我认为这可能是一个错误,因为我一直在尝试 :not():not() 并且它似乎只尊重第一个.. 但是 css 选择了正确的元素,但javascript没有。尚未检查其他浏览器。【参考方案2】:

在寻找红鲱鱼时发现了这个(非常古老的)问题。这个答案是要注意的:今天,Chrome v73 工作得很好。这里的片段证明了这一点:

const sel = '#wonderful div:nth-child(2) div:nth-child(2)';
console.log(document.querySelector(sel))
 <div id="wonderful">
    <div></div>
    <div>
       <div></div>
       <div class="blue">find me!</div>
    </div>
 </div>

【讨论】:

以上是关于在 Chrome 中嵌套 nth-child 的 querySelector 似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章

nth-child自定义:用Unicode字符替换项目符号,并且不适用于嵌套的

如何使用 Selenium 的标准 CSS 选择器(nth-of-type 或 nth-child)选择嵌套元素?

IE:使用奇数/偶数的 nth-child() 不起作用

nth-child 在 IE7/IE8 中不起作用

:nth-child(even/odd) 不适用于 acf

具有变量值的 nth-child 选择器选择资源管理器中的所有元素