change()
函数可以工作并检测表单元素的更改,但是有没有一种方法可以检测DOM元素的内容何时更改?
这是行不通的,除非#content
是表单元素
$("#content").change( function(){
// do something
});
我希望在执行类似操作时触发此操作:
$("#content").html('something');
另外html()
或append()
函数没有回调。
有什么建议?
change()
函数可以工作并检测表单元素的更改,但是有没有一种方法可以检测DOM元素的内容何时更改?
这是行不通的,除非#content
是表单元素
$("#content").change( function(){
// do something
});
我希望在执行类似操作时触发此操作:
$("#content").html('something');
另外html()
或append()
函数没有回调。
有什么建议?
Answers:
我知道这篇文章已有1年的历史,但是我想为遇到类似问题的人提供不同的解决方案:
jQuery change事件仅在用户输入字段上使用,因为如果有其他操作(例如div),则该操作来自代码。因此,找到操作发生的位置,然后在其中添加所需的任何内容。
但是,如果由于某种原因(您使用的是复杂的插件或找不到任何“回调”的可能性)而无法实现,那么我建议的jQuery方法是:
一个。对于简单的DOM操作,请使用jQuery链接和遍历,$("#content").html('something').end().find(whatever)....
b。如果您想做其他事情,请使用bind
带有自定义事件的jQuery 和triggerHandler
$("#content").html('something').triggerHandler('customAction');
$('#content').unbind().bind('customAction', function(event, data) {
//Custom-action
});
这是jQuery触发器处理程序的链接:http : //api.jquery.com/triggerHandler/
bind
期望您的处理程序返回bool
。
浏览器不会触发<div>
元素的onchange事件。
我认为这背后的原因是,除非通过javascript进行修改,否则这些元素不会更改。如果您已经必须自己修改元素(而不是用户自己修改),则可以在修改元素的同时调用相应的随附代码,如下所示:
$("#content").html('something').each(function() { });
您还可以手动触发这样的事件:
$("#content").html('something').change();
如果这些解决方案都不适合您的情况,能否请您提供有关您要具体实现的目标的更多信息?
$(document).bind("DOMSubtreeModified",function(){
console.log($('body').width() + ' x '+$('body').height());
})
不推荐使用此事件,而推荐使用Mutation Observer API
试试看,它是由James Padolsey(JP在此处公开)创建的,它确实满足您的要求(我认为)
http://james.padolsey.com/javascript/monitoring-dom-properties/
从严格意义上讲,这不是jQuery的答案,但是对于调试来说却很有用。
在Firebug中,您可以右键单击DOM树中的元素,然后设置“属性更改中断”:
在脚本中更改属性后,将显示调试窗口,您可以跟踪其运行情况。下方还有一个用于元素插入和元素删除的选项(屏幕截图中的弹出窗口会掩盖这些内容)。
我正在开发一个名为mutabor(https://github.com/eskat0n/mutabor)的小型JS库,该库旨在简化DOM突变事件的使用。有关示例,请参见demo.html。
尝试使用livequery插件。这似乎对我正在做的事情起作用。
通常,一种简单有效的方法是跟踪修改DOM的时间和地点。
您可以通过创建一个始终负责修改DOM的中央功能来做到这一点。然后,您可以从此函数中对修改后的元素进行所需的任何清理。
在最近的应用程序中,我不需要立即执行操作,因此我为方便的load()函数使用了回调,可以将类添加到任何已修改的元素中,然后每隔几秒钟使用setInterval计时器更新所有已修改的元素。
$($location).load("my URL", "", $location.addClass("dommodified"));
然后,您可以根据需要处理它-例如
setInterval("handlemodifiedstuff();", 3000);
function handlemodifiedstuff()
{
$(".dommodified").each(function(){/* Do stuff with $(this) */});
}
您可以将回调选项添加到html(或任何)函数中:
$.fn.oldHtml = $.fn.html;
$.fn.html = function(html,fn){
fn = fn || function(){};
var result = this.oldHtml(html);
fn();
return result;
};
$('body').html(11,function(){alert("haha");});
您在某些元素上进行更改,而不是因必须捕获的内容而迫使元素进行更改。
我编写了一个片段,用于检查事件中元素的更改。
因此,如果您使用的是第三方JavaScript代码或其他内容,并且您需要知道单击后出现或更改的内容,则可以。
对于下面的代码段,假设您需要了解单击按钮后表格内容何时更改。
$('.button').live('click', function() {
var tableHtml = $('#table > tbody').html();
var timeout = window.setInterval(function(){
if (tableHtml != $('#table > tbody').
console.log('no change');
} else {
console.log('table changed!');
clearInterval(timeout);
}
}, 10);
});
伪代码:
我们可以通过使用Mutation Events来实现。根据www.w3.org所述,突变事件模块旨在允许通知文档结构的任何更改,包括属性和文本修改。欲了解更多详细的突变事件
例如 :
$("body").on('DOMSubtreeModified', "#content", function() {
alert('Content Modified'); // do something
});