如何使用 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
时调用匹配的函数idcontainer
使用 jQuery DOM 操作方法之一找到或添加到 DOM - 当
div
时调用不匹配的函数idcontainer
之前发现的内容已使用 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/