JavaScript的窗口之间有什么区别。onload和jQuery的$(document).ready()方法?
当前回答
时间过得真快,现在是ECMAScript 2021年,人们越来越少使用IE11。相反,最多的两个事件是load和DOMContentLoaded。
DOMContentLoaded在初始HTML文档完全加载和解析后触发。
load在DOMContentLoaded和整个页面加载后触发, 等待所有相关资源完成加载。资源示例:脚本,样式表,图像和iframe等。
重点:同步脚本将暂停DOM的解析。
这两个事件都可以用来确定DOM是否可以使用。例子:
<script>
// DOM hasn't been completely parsed
document.body; // null
window.addEventListener('DOMContentLoaded', () => {
// Now safely manipulate DOM
document.querySelector('#id');
document.body.appendChild();
});
/**
* Should be used only to detect a fully-loaded page.
*
* If you just want to manipulate DOM safely, `DOMContentLoaded` is better.
*/
window.addEventListener('load', () => {
// Safely manipulate DOM too
document.links;
});
</script>
其他回答
在Internet Explorer中使用$(document).ready()需要注意。如果一个HTTP请求在整个文档加载之前被中断(例如,当一个页面流到浏览器时,另一个链接被单击)IE将触发$(document)。准备好活动。
如果$(document).ready()事件中的任何代码引用DOM对象,则存在找不到这些对象的可能性,并且可能发生Javascript错误。要么保护对这些对象的引用,要么将引用这些对象的代码延迟到窗口。负载的事件。
我无法在其他浏览器(特别是Chrome和Firefox)中重现此问题
$(document).ready()是一个jQuery事件。JQuery的$(document).ready()方法在DOM准备就绪时立即被调用(这意味着浏览器已经解析了HTML并构建了DOM树)。这允许您在文档准备好操作时立即运行代码。
例如,如果一个浏览器支持DOMContentLoaded事件(许多非ie浏览器都支持),那么它将在该事件上触发。(请注意DOMContentLoaded事件仅在IE9+中添加到IE。)
可以使用两种语法:
$( document ).ready(function() {
console.log( "ready!" );
});
或者简写一下:
$(function() {
console.log( "ready!" );
});
$(document).ready()的要点:
它不会等待图像被加载。 用于在完全加载DOM时执行JavaScript。把事件处理程序放在这里。 可多次使用。 当收到“$ is not defined”时,将$替换为jQuery。 如果您想操作图像,则不使用。请使用$(window).load()代替。
window.onload()是一个原生JavaScript函数。当页面上的所有内容(包括DOM(文档对象模型)、横幅广告和图像)都已加载时,window.onload()事件将触发。两者之间的另一个区别是,虽然我们可以有多个$(document).ready()函数,但我们只能有一个onload函数。
一个小提示:
一定要走窗户。addEventListener向窗口中添加一个事件。因为这样可以在不同的事件处理程序中执行代码。
正确的代码:
窗口。addEventListener('load', function () { alert('你好! ') }) 窗口。addEventListener('load', function () { alert('再见! ') })
无效的代码:
窗口。Onload = function () { alert('Hello!') //它不会工作!! } 窗口。Onload = function () { alert('再见! ') }
这是因为onload只是对象的属性,它会被覆盖。
与addEventListener类似,最好使用$(document).ready()而不是onload。
该文档。ready事件发生时,HTML文档已加载,窗口。Onload事件总是稍后发生,当所有内容(图像等)都已加载。
你可以使用文档。Ready事件,如果你想在渲染过程中“早期”介入,而不等待图像加载。 如果你需要图像(或任何其他“内容”)在你的脚本“做一些事情”之前准备好,你需要等到window.onload。
例如,如果您正在实现“幻灯片显示”模式,并且需要根据图像大小执行计算,则可能希望等到window.onload。否则,您可能会遇到一些随机问题,这取决于图像加载的速度。您的脚本将与加载图像的线程同时运行。如果脚本足够长,或者服务器足够快,如果图像恰好及时到达,您可能不会注意到问题。但是最安全的做法是允许图像被加载。
文档。Ready可以是一个很好的事件,让你向用户显示一些“loading…”标志,并在窗口上显示。onload,你可以完成任何需要加载资源的脚本,然后最后删除“Loading…”标志。
例子:-
// document ready events
$(document).ready(function(){
alert("document is ready..");
})
// using JQuery
$(function(){
alert("document is ready..");
})
// window on load event
function myFunction(){
alert("window is loaded..");
}
window.onload = myFunction;
窗口。onload是由DOM api提供的,它说“加载事件在给定资源加载时触发”。
"加载事件在文档加载过程结束时触发。此时,文档中的所有对象都在DOM中,所有图像、脚本、链接和子帧都已完成加载。” DOM onload
但是在jQuery中,$(document).ready()只会在页面文档对象模型(DOM)准备好执行JavaScript代码时运行。这并不包括图像,脚本,iframes等jquery就绪事件
因此jquery ready方法将在dom onload事件之前运行。