什么是'$(document).ready()'的非jQuery等价物?
$(document).ready()
的非jQuery等价物是什么?
$(document).ready()
在于它在window.onload
之前触发。 加载函数等待所有内容加载完成,包括外部资源和图像。 $(document).ready
,但是,当DOM树完成并可以被操纵时触发。 如果你想让DOM准备好,没有jQuery,你可以检查这个库。 有人从jQuery中提取了ready
部分。 它很好,很小,你可能会觉得它很有用:
已经在谷歌代码
这从ECMA完美地工作
document.addEventListener("DOMContentLoaded", function() { // code... });
window.onload
等于JQuery $(document).ready
因为JQuery只等待DOM树,而Vanilla JS检查包括外部资源和图像的所有元素。
编辑 :增加IE8和更旧的等效,谢谢Jan Derk的观察。 您可以在此链接阅读MDN 上的代码来源:
// alternative to DOMContentLoaded document.onreadystatechange = function () { if (document.readyState == "interactive") { // Initialize your application or run some code. } }
除了"interactive"
之外,还有其他的select。 有关详细信息,请参阅MDN链接。
有一点我放在一起
domready.js
(function(exports, d) { function domReady(fn, context) { function onReady(event) { d.removeEventListener("DOMContentLoaded", onReady); fn.call(context || exports, event); } function onReadyIe(event) { if (d.readyState === "complete") { d.detachEvent("onreadystatechange", onReadyIe); fn.call(context || exports, event); } } d.addEventListener && d.addEventListener("DOMContentLoaded", onReady) || d.attachEvent && d.attachEvent("onreadystatechange", onReadyIe); } exports.domReady = domReady; })(window, document);
如何使用它
<script src="domready.js"></script> <script> domReady(function(event) { alert("dom is ready!"); }); </script>
您还可以通过传递第二个参数来更改callback运行的上下文
function init(event) { alert("check the console"); this.log(event); } domReady(init, console);
有一个基于标准的replace, DOMContentLoaded由超过90%的浏览器支持,但不支持IE8(所以下面的代码使用JQuery支持浏览器) :
document.addEventListener("DOMContentLoaded", function(event) { //do work });
jQuery的本地函数比window.onload复杂得多,如下所示。
function bindReady(){ if ( readyBound ) return; readyBound = true; // Mozilla, Opera and webkit nightlies currently support this event if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", function(){ document.removeEventListener( "DOMContentLoaded", arguments.callee, false ); jQuery.ready(); }, false ); // If IE event model is used } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes document.attachEvent("onreadystatechange", function(){ if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", arguments.callee ); jQuery.ready(); } }); // If IE and not an iframe // continually check to see if the document is ready if ( document.documentElement.doScroll && window == window.top ) (function(){ if ( jQuery.isReady ) return; try { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); } catch( error ) { setTimeout( arguments.callee, 0 ); return; } // and execute any waiting functions jQuery.ready(); })(); } // A fallback to window.onload, that will always work jQuery.event.add( window, "load", jQuery.ready ); }
在普通的香草JavaScript中,没有库? 这是一个错误。 $
只是一个标识符,除非你定义它,否则是未定义的。
jQuery将$
定义为它自己的“所有对象”(也称为jQuery
因此您可以在不与其他库冲突的情况下使用它)。 如果你不使用jQuery(或其他定义它的库),那么$
就不会被定义。
或者你问在普通的JavaScript中等价物是什么? 在这种情况下,您可能需要window.onload
,它不完全等价,但它是在vanilla JavaScript中最接近相同效果的最快和最简单的方法。
onLoad身体也可以是一个替代scheme:
<html> <head><title>Body onLoad Exmaple</title> <script type="text/javascript"> function window_onload() { //do something } </script> </head> <body onLoad="window_onload()"> </body> </html>
最近浏览器最简单的方法是使用onDOMContentLoaded上的js事件:
onDOMContentLoaded = (function(){ console.log("Dom is ready!") })()
我不认为JavaScript有内置的function。它是jQuery特定的。