gpt4 book ai didi

javascript - livequery 用于检测 dom 变化

转载 作者:行者123 更新时间:2023-12-02 20:44:02 25 4
gpt4 key购买 nike

如何使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com