javascript - jQuery - 当 DOM 改变时运行一个函数

标签 javascript ajax jquery

我一直在使用 livequery到目前为止哪个有效,但它使页面浏览看起来真的很慢。 所以我正在尝试为此寻找替代解决方案。

我附加了一个函数,该函数在具有特定类的元素上运行一些 ajax,例如:

$(".blah").each(function(){
  $.ajax({
      ...
      success: function(data) { 
        $(this).removeClass(".blah");
        // do other stuff
      }
  });
});

现在我有几个事件卡在不同的元素上,可以在 DOM 中附加 html,比如:

$(".button").click(function(){
  $.ajax({
      ...
      success: function(data) { 
        $(this).append(data);
        // here, new elements with ".blah" class could be inserted in the DOM
        // the event above won't be fired...
      }
  });
});

当 DOM 在其他事件中更新时,我如何才能运行上面的第一个 ajax 函数?

更新:

我还找到了这个插件: http://www.thunderguy.com/semicolon/2007/08/14/elementready-jquery-plugin/

您认为这会是更好的解决方案吗?乍一看似乎是这样,因为它允许您设置“轮询”间隔,如果将其设置为 1 秒或其他时间,这可能会降低 CPU 使用率。我现在正在测试它:)

更新 2:

不幸的是,由于某些奇怪的原因,它只适用于元素 ID :(

最佳答案

大多数主流浏览器(遗憾的是 IE <= 8 不支持)支持 DOM mutation events (另见 MDN )。如果您只对添加到 DOM 的节点感兴趣,请使用 DOMNodeInserted 事件。如果您想了解任何 DOM 更改,请使用包罗万象的 DOMSubtreeModified 事件。

例如:

document.addEventListener("DOMNodeInserted", function(evt) {
    alert("Node inserted. Parent of inserted node: " + evt.relatedNode.nodeName);
}, false);

document.body.appendChild( document.createElement("div") );

2012 年 12 月 13 日更新

DOM 突变事件现已弃用,浏览器逐渐转向 mutation observers .目前最明智的策略似乎是使用变异观察者并回退到变异事件。

关于javascript - jQuery - 当 DOM 改变时运行一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4765768/

相关文章:

javascript - 一些赋值运算符在 AngularJS 表达式中不起作用。为什么不呢?

javascript - 如何在不刷新页面的情况下根据准确时间重新加载内容

javascript - 正确返回带有嵌入 JS 函数的 JSON 对象

javascript - 如何在 JSON 中使用 if 语句?

javascript - 捕获所有点击事件并丢弃不允许的

javascript - 在 JavaScript 中从 RGB 像素数组中将图像绘制到屏幕上的最快方法是什么?

javascript - 将对象的两个位置链接到单个位置

javascript - 由于r.js将AMD模块编译成一个大文件,那么Asynchronous Module Definition中的 "asynchronous"在哪里呢?

asp.net - 什么会导致 ASP.NET 工作进程被回收?

javascript - 当您在外面释放鼠标时,如何停止点击传播