javascript - CSS选择器和querySelector函数的结果区别
问题描述
我不理解这段代码的控制台输出,特别是因为 CSS 代码针对的是正确的元素,而不是 querySelector 函数。
let firstChild = document.querySelector('BODY > :first-child');
console.log(firstChild.querySelector(':first-child > :first-child'));
console.log(firstChild.querySelector(':first-child'));
BODY > :first-child > :first-child > :first-child {
color: red;
}
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div class="D1">
<div class="D2">
<div>A</div>
<div>B</div>
</div>
</div>
</body>
</html>
解决方案
foo.querySelector
匹配选择器匹配的第一个元素foo
。
这个:
let firstChild = document.querySelector('BODY > :first-child');
火柴<div class="D1">
然后:
firstChild.querySelector(':first-child > :first-child')
匹配<div class="D2">
因为:
<div class="D2">
在里面firstChild
<div class="D1">
匹配:first-child
(它是 的第一个孩子body
)<div class="D2">
匹配:first-child
(它是 的第一个孩子D1
)
firstChild.querySelector(':first-child')
......给出了类似的结果,它只是不关心上面的第二个条件。
简而言之,您会得到不同的结果,因为querySelector
它不会向选择器本身添加隐式的“后代foo
”,也不需要匹配的每个元素都是foo
(只有最终元素需要匹配)的后代。
推荐阅读
- apache-spark - Apache Spark 优化
- java - 在 Spring 中使用不同的用户执行身份验证
- c# - 如何使用 Unity 的 Update 函数指定对象的旋转值
- java - 如何在 Spring Boot + Hibernate 中实现“删除”方法
- android - openDrawer react native Undefined is not an object
- amazon-web-services - Cloudfront - 自定义来源 403 响应
- c++ - 为 3D Cup 创建圆柱体底座(现代 OpenGL、GLM)
- r - 在R图中将正方形转换为矩形
- visual-studio - VS Code“更好地处理 Unicode 组合字符”:不是
- c++ - tsan 对 notify_all_at_thread_exit 的投诉