Javascript jQuery是否监视DomeElement更改?

Javascript jQuery是否监视DomeElement更改?,javascript,jquery,jquery-plugins,jquery-events,Javascript,Jquery,Jquery Plugins,Jquery Events,我有一个ajax回调,它将html标记注入到footer div中 我搞不懂的是如何创建一种方法来监视div的内容何时更改。在回调中放置我试图创建的布局逻辑不是一个选项,因为每个方法(回调和我的布局div处理程序)都不应该知道另一个 理想情况下,我希望看到类似于$('#myDiv').ContentsChanged(function(){…})或$('#myDiv').TriggerWhenContentExists(function(){…}) 我发现了一个名为watch的插件和该插件的改进版

我有一个ajax回调,它将html标记注入到footer div中

我搞不懂的是如何创建一种方法来监视div的内容何时更改。在回调中放置我试图创建的布局逻辑不是一个选项,因为每个方法(回调和我的布局div处理程序)都不应该知道另一个

理想情况下,我希望看到类似于
$('#myDiv').ContentsChanged(function(){…})
$('#myDiv').TriggerWhenContentExists(function(){…})

我发现了一个名为watch的插件和该插件的改进版本,但两者都无法触发。我试着“观察”我能想到的一切(即通过ajax注入更改div的height属性),但根本无法让他们做任何事情


有什么想法/帮助吗?

您可能想了解Firefox/Opera/Safari的DOMNodeInserted事件和IE的onpropertychange事件。利用这些事件可能不会太难,但可能有点黑客行为。下面是一些javascript事件文档:

您可以通过绑定到chrome中测试的但在IE中不起作用的组件来侦听对DOM元素的更改(例如,您的div) 单击按钮会导致正在监视的div发生更改,从而填充另一个div以显示其工作状态


再多看一眼就知道了,它应该能满足你的需求:

$('#idOfDiv').bind('contentchanged', function() {
    // do something after the div content has changed
    alert('woo');
});
在更新div的函数中:

$('#idOfDiv').trigger('contentchanged');

将此视为一种

我发现的最有效的方法是绑定到
domsubtreemedited
事件。它可以与jQuery的
$.html()
和标准JavaScript的
innerHTML
属性一起使用

$('#content').bind('DOMSubtreeModified', function(e) {
  if (e.target.innerHTML.length > 0) {
    // Content change handler
  }
});

当从jQuery的
$.html()
调用时,我发现事件触发了两次:一次用于清除现有内容,一次用于设置。一个快速的
.length
-检查将在简单的实现中起作用


同样重要的是要注意,当设置为HTML字符串时,事件总是会触发(即
“Hello,world

)。对于纯文本字符串,事件只有在更改时才会触发。

有一个整洁的javascript库,google提供的突变摘要,可以让您简洁地观察dom更改。最棒的是,如果你愿意,你可以只被告知在DOM中真正起作用的行为,来理解我的意思,你应该在项目主页上观看信息丰富的视频

链接:

jquery包装器:

您使用什么方法注入内容?在本例中,我使用的是jQuery布局插件。在西部窗格中,我有一个content div和footer div。布局在ajax调用之前初始化,因此窗格的content面板占据了窗格高度的100%。如果存在的行数多于房间数,则我的成功回调知道通过其id在页脚div中创建分页寻呼机。。。var success=函数(数据){$(divid).paginate(选项);…}。但它不知道它在布局对象中。我需要触发布局;不知何故,但我不想在回调中硬连接jQuery UI布局逻辑。可能值得注意的是,
domsubtreemedited
在技术上不受欢迎。看来有一天DOM4将提供一个可行的替代方案。见: