使用querySelector查找后代元素返回意外结果

问题描述 投票:0回答:3
javascript selectors-api
3个回答
2
投票

根据文档,“选择器是在元素所在的整个 DOM 树的上下文中针对给定元素进行评估的。”

也就是说,它不是 jQuery 风格的“查找与从此处开始的选择器路径匹配的元素”。

根据规范,从 DOM 树级别查看时,

#parent #foo

 绝对匹配 
div div
div > div

当您将

#parent

 更改为 
span
 时,它会“起作用”,因为 
#parent #foo
 不再匹配 
div div
,而 
#foo #bar
 是新的第一个匹配项。


0
投票
对我来说,截至今天它返回正确的结果

<!DOCTYPE html> <html> <body> <div id="parent"> <div id="foo"> <div id="bar"> <p> sample para </p> </div> </div> </div> <script> //const div = document.querySelector("div div div").innerHTML; var parent = document.getElementById('parent'); const div = parent.querySelector('div div').innerHTML; document.write(div); //sample para const div = parent.querySelector('div div').innerHTML; document.write(div); //sample para </script> </body> </html>
    

0
投票
您可以使用“

:scope”来限制后代,这样

var parent = document.getElementById('parent'); parent.querySelector(':scope > div div');
返回

#bar

。所有现代浏览器都支持它。

这个答案学习。

© www.soinside.com 2019 - 2024. All rights reserved.