【发布时间】:2015-05-29 16:35:13
【问题描述】:
我正在制作一个不依赖 jQuery 的插件,为了与各种现有流行的 jQuery 功能和插件很好地配合,必须在到达 DOM 末尾之后执行一个函数,但是不是在之后使用 jQuery .ready() 执行任何稍后排队的操作。
标准的非jQuery .ready() 替代品是document.addEventListener("DOMContentLoaded",function(){});。
如果页面具有使用 jQuery .ready() 和 DOMContentLoaded 延迟的功能:
- 所有 jQuery
.ready()s 都按照它们定义的顺序执行 - ...然后所有
DOMContentLoadeds 执行,按照它们被定义的顺序:
...两者都发生在 interactive 和 complete 文档 readyStates 之间:
document.addEventListener("readystatechange", function () { alert(document.readyState); });
document.addEventListener("DOMContentLoaded", function(event) { alert(1); });
$(document).ready(function(){ alert(2); });
document.addEventListener("DOMContentLoaded", function(event) { alert(3); });
$(document).ready(function(){ alert(4); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
我可以使用什么类似于 document.addEventListener("DOMContentLoaded") 但没有被任何和所有 jQuery .ready()s 这样的抢占?
为了明确确切的时间,在我的特定情况下,我可以保证这个时间关键代码在任何.ready()s 排队之前排队,所以与.ready() 附加到同一队列的答案也将解决我的问题,而不仅仅是抢占 all .ready()s 的答案。但是抢占所有.ready()s 可能更可取,因为它适用于更广泛的情况。
(对于 jQuery 的 .ready() 的任何清晰简单的解释,无论何时定义,它都会在所有 document.addEventListener("DOMContentLoaded") 之前执行,我无法弄清楚)
【问题讨论】:
-
我去过!
:-)但我还没有破解 jQuery 如何设法领先于所有"DOMContentLoaded"s 的问题,即使它们是在 jQuery 本身之前定义的
标签: javascript jquery execution