我有一个简单的js
代码:
<html>
<head>
<title>test</title>
<script type="text/javascript" src="js/jquery-1.11.2.min.js"></script>
<script type="text/javascript">
console.log(document.querySelector('#nav-toggle')); // this will get null
console.log($('#nav-toggle')); // this will get the element
</script>
</head>
<body>
<a id="nav-toggle" href="#">link</a>
<script type="text/javascript">
console.log(document.querySelector('#nav-toggle')); // this will get the element
console.log($('#nav-toggle')); // this will get the element
</script>
</body>
</html>
在我发表评论时,第一个document.querySelector('#nav-toggle')
将获得null
,我猜问题是dom element
尚未呈现,因为第二个获取元素。
但jQuery
可以获取该元素,无论其位置如何,jQuery
怎么可能这样做?
答案 0 :(得分:4)
有许多不同的方法可以检查是否已满载。哪条路要始终根据您的需要而定。你不想等待比真正需要更长的时间。
只是为了澄清,&#34; window.load&#34;是不与jQuery&#34; $(document).ready()&#34;。
相同如果你想要一个&#34;香草&#34;替代方案,DOMContentLoaded是你的救援。
<强> DOMContentLoaded 强>
来自MDN:https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded
文档发布时会触发DOMContentLoaded事件 完全加载和解析,无需等待样式表,图像, 和子帧完成加载(加载事件可用于检测 一个完整的页面。)
document.addEventListener("DOMContentLoaded", function() {
});
<强> window.load 强>
来自MDN:https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onload
加载事件在文档加载过程结束时触发。在 至此,文档中的所有对象都在DOM中,而且都是 图像,脚本,链接和子框架已完成加载。
window.onload = function() {
}
答案 1 :(得分:1)
你被误导了。 Jquery无法获得尚未存在的元素。你可以用jQuery做的是使用它的document.ready方法,它在文档加载后运行。您可以使用onload事件使用vanilla javascript获得类似的结果。
答案 2 :(得分:0)
将您的代码更改为以下内容,如果元素存在于DOM
中,您将始终找到该元素<html>
<head>
<title>test</title>
<script type="text/javascript" src="js/jquery-1.11.2.min.js"></script>
<script type="text/javascript">
window.onload = function() {
console.log(document.querySelector('#nav-toggle')); // this will get null
console.log($('#nav-togglle')); // this will get the element
}
</script>
</head>
<body>
<a id="nav-toggle" href="#">link</a>
<script type="text/javascript">
console.log(document.querySelector('#nav-toggle')); // this will get the element
console.log($('#nav-togglle')); // this will get the element
</script>
</body>
</html>
只是解释一下,jQuery在那里没有做任何魔术。出于测试目的,您可以交换您的vanilla javascript和jquery代码行,通过刷新页面尝试几次,您可能会看到不同的结果。
在你的当前场景中,只是jQuery可以找到该元素,因为在调用jQuery语句之前已经加载了元素(异步性质,你看!)