6

我知道这可以通过某种方式处理,但到目前为止,这让我很难过。我正在编写一个脚本,并希望在 DOM 操作完成后触发一些特定的功能。我无法修改/添加/删除任何其他脚本(因为它可能会使用某些框架注入到页面中)。该页面使用 ajax 请求(未在 jQuery 中实现)来加载/修改内容。现在我希望在每个 DOM 修改完成后触发一个事件。我目前的方法是在每个 DOMSubtreeModified 事件中触发该函数。像这样的东西

$(document).bind('DOMSubtreeModified', doSomeStuff);

但是这种方法的缺点是,假设 ajax 在一次调用中加载 10 个元素,然后为每个元素触发 doSomeStuff。这可以限制为仅在加载第 10 个元素后触发吗?类似于重置 $(document).ready() 事件?所以每次 DOM 准备好时都会触发 $(document).ready() (在加载 ajax 内容之后)

4

3 回答 3

2

使用 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
});
于 2013-10-26T11:56:11.570 回答
1

在 jQuery 中,有一个方法ajaxComplete,它在每次完成 AJAX 调用后调用给定的函数。在这里查看更多。

我建议使用 jQuery 或者(如果这不是一个选项)分析这个函数的源代码,看看它是如何在那里完成的。

于 2013-10-26T11:32:29.440 回答
0

我知道我参加聚会有点晚了,但听起来你可能想要去抖动你的doSomeStuff功能。如果你不反对引入对 Underscore.js 的依赖,它有一个很好的去抖动功能。

于 2014-03-05T18:09:30.917 回答