有没有一种方法可以使用jQuery或JavaScript检查给定选择器/元素的HTML DOM元素是否已经准备好了?
查看jQuery api的ready函数,它看起来只能与document对象一起使用。如果ready不能用于此目的,是否有其他方法?
例如
$('h1').ready(function()
{
//do something when all h1 elements are ready
});
显然我可以
$(document).ready(function()
{
//do something when all h1 elements are ready
});
但是如果所有的h1元素都先加载,那么h1元素的代码将只在整个文档准备好之后才执行,即使它实际上可以更早执行。
6条答案
按热度按时间pdtvr36n1#
Edit 2012
live
方法自jQuery 1.7.0起已弃用。现在建议使用.on() event附加事件处理程序。它取代了.bind()、.delegate()和.live()。参见文档:http://api.jquery.com/on/
我想jQuery .live() event可能是你要找的。
mrzz3bfm2#
是的,有可能:虽然它不是原生的,但很容易被植入。只需在您要查找的节点加载到DOM中之后触发一个自定义事件。
注意:我是用jQuery写的,这意味着你必须在加载过程的早期就包含jQuery,这是一个性能方面的禁忌。也就是说,如果你已经在你的文档中使用了jQuery,或者DOM构造对你来说需要很长时间,这可能是值得的。否则,你可以用vanilla JS来跳过$依赖。
tpgth1q73#
我提出了一个可能的解决方案,使用promise,也许可以帮助其他人,我使用
jquery
,因为我很懒:P。几乎是等待
dom
存在,然后执行promise中的resolve函数:h5qlskok4#
答案可能是否定的。从浏览器的Angular 来看,这可能是一个糟糕的设计,甚至可能不允许这样的事情。
对于DOM准备好后动态插入的元素,可以使用dom事件- DOMNodeInserted。你也可以使用上面提到的jquery live,它可能使用相同的事件。
cs7cruho5#
下面的代码为我工作!
icomxhvb6#
对于vanilla JS,我已经使用过这个片段很多次了,效果很好,特别是在页面负载很大的页面上。该脚本将循环(在本例中为50次),并不断检查要查询的元素是否已加载到DOM中,然后执行代码。