【发布时间】:2021-07-10 07:17:33
【问题描述】:
我正在尝试在文档加载后使用伪类:target 获取目标元素。
我创建了以下示例来说明问题。
<!DOCTYPE html>
<html>
<head>
<script>
document.addEventListener("DOMContentLoaded",function(){
console.log(document.querySelector(":target"));
});
</script>
</head>
<body>
<div id="test"></div>
</body>
</html>
如果我加载test.html,那么控制台输出:
null
如果我在 Chrome 和 Opera 上加载 test.html#test,那么控制台会输出:
null
如果我在 Firefox 和 IE11 上加载 test.html#test,那么控制台输出:
<div id="test"></div>
我的问题是:
- 哪些浏览器的行为正确?
-
DOMContentLoaded是调用querySelector(":target")的正确事件吗? - 是否有其他方法可以在文档加载后获取目标元素?
PS:感谢setTimeout,我成功解决了 Chrome 和 Opera 上的问题,但这不是一个好的解决方案。有人有更好的主意吗?
编辑:我发现与 JQuery Selecting :target on document.ready() 类似的问题
【问题讨论】:
-
来自Selectors API Level 1: "建议作者虽然允许在选择器中使用 伪元素,但它们不会匹配文档中的任何元素,因此会不会导致返回任何元素。因此,建议作者避免在传递给本规范中定义的方法的选择器中使用伪元素。"
-
但
:target是pseudo class 而不是pseudo element -
在
onload中,它在 Chrome 中可以使用 fine for me,但在 Safari 中则不行...一个破解方法是在:target上设置一个小的过渡(0.01 秒)并收听过渡结束事件。
标签: javascript css-selectors pseudo-class selectors-api domcontentloaded