javascript - livequery 用于检测 dom 变化

标签 javascript jquery jquery-plugins

如何使用 JQuery 的 livequery 检测 DOM 中的更改,例如更新的 insideHTML 等。

我尝试了如下

脚本-

var matched = function() {
        alert('detected');
};
var unmatched = function() {
    alert('removed')
};

$('div#container').livequery(matched, unmatched)

HTML -

<BODY onload="setTimeout(function(){
        document.getElementById('container').innerHTML = 'updated test';    },3000);">

  <div id="container">test</div>
 </BODY>

但这行不通。

谢谢, 苏拉卜

最佳答案

您尝试执行的操作不是 livequery-plugin 的设计目的

$('div#container').livequery(matched, unmatched);

这告诉 livequery:

  • div时调用匹配的函数id container使用 jQuery DOM 操作方法之一找到或添加到 DOM
  • div 时调用不匹配的函数id container之前发现的内容已使用 jQuery DOM 操作方法之一从 DOM 中删除(或 id 更改)

因此,对于您的示例,它只会在页面加载时触发检测到警报。由于innerHTML更改既不添加也不删除具有id容器的div,livequery应该不执行任何操作,而这就是它的作用。

<小时/>

使用* (而不是 div#container )只会在页面加载时触发几个警报,但只要您使用非 jQuery DOM 操作方法,就不会触发。

document.getElementById('container').innerHTML = 'updated test';

不触发 matched()作为#1,你不使用 jQuery 来进行操作; #2 你没有添加一个新元素 *会匹配。

document.getElementById('container').innerHTML = '<p>updated test</p>'

不触发 matched()因为您不使用 jQuery 进行操作(尽管您添加了一个元素 <p> ,该元素将与 * 选择器匹配,但不会由 livequery 注册,因为它只监听 jQuery DOM 操作方法(并且仅也是其中的一部分)。

如果你使用

$("#container").html('<p>updated test</p>');

它将触发 matched() 3秒后。如果你只这样做

$("#container").html('updated test');

matched()不会被解雇,因为没有添加任何与 * 匹配的内容选择器仅更改已匹配元素的innerHTML

关于javascript - livequery 用于检测 dom 变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1748411/

相关文章:

javascript - Bootstrap 表中的可编辑单元格格式

jQuery UI 自动完成忽略非字母数字字母

jquery - 如何在没有ajax的情况下获得twitter "show more"效果?

javascript - 如何将列表项类别设置为事件导航栏

javascript - 将背景图像换成背景 gif

Jquery:如何按顺序而不是同时在多个对象上触发同一事件

javascript - 是否可以在同一对象中引用对象?

javascript - dotdotdot.js 仅在调整窗口大小后有效

javascript - javascript 中的切换属性(attr)

javascript - 如何添加带有空白导航标签的 WordPress 菜单项?