[英]Firing javascript event on every DOM change “complete”
我知道这可以通过某种方式处理,但截至目前,这给了我一个非常艰难的时刻。 我正在编写一个脚本,并希望在DOM操作完成时触发一些特定的函数。 我无法修改/添加/删除任何其他脚本(因为它可能使用某些框架注入页面)。 该页面使用ajax请求(未在jQuery中实现)来加载/修改内容。 现在我希望在每个DOM修改完成后触发一个事件。 我目前的方法是在每个DOMSubtreeModified事件中触发该函数。 像这样的东西
$(document).bind('DOMSubtreeModified', doSomeStuff);
但是这种方法的缺点是,假设ajax在调用中加载了10个元素,然后为每个元素触发doSomeStuff。 这可以限制为仅在加载第10个元素后触发吗? 重置$(document).ready()事件之类的东西? 每次DOM准备好时(加载ajax内容后)都会触发$(document).ready()
使用Mutation Observer,您可以监听更改,如果事件被触发,则文档已更改。
MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
var observer = new MutationObserver(function(mutations, observer) {
// Add the actions to be done here if a changes on DOM happened
console.log(mutations, observer);
});
// Register the element root you want to look for changes
observer.observe(document, {
subtree: true,
attributes: true
});
在jQuery中,有一个方法ajaxComplete
,它在每次完成的AJAX调用之后调用给定的函数。 在这里查看更多。
我建议使用jQuery或(如果这不是一个选项)分析这个函数的源代码,看看它是如何在那里完成的。
我知道我参加派对有点晚了,但听起来你可能想要doSomeStuff
你的doSomeStuff
功能。 如果你不反对在Underscore.js上引入依赖,它有一个很好的去抖功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.