使用 jQuery 检测元素内容的变化

IT技术 javascript jquery dom
2021-01-20 21:23:58

change() 函数工作并检测表单元素的变化,但是有没有办法检测 DOM 元素的内容何时发生变化?

这不起作用,除非#content是表单元素

$("#content").change( function(){
    // do something
});

我希望在执行以下操作时触发:

$("#content").html('something');

html()append()函数没有回调。

有什么建议?

6个回答

我知道这篇文章已经有一年了,但我想为那些有类似问题的人提供不同的解决方案:

  1. jQuery 更改事件仅用于用户输入字段,因为如果操作其他任何内容(例如,div),则该操作来自代码。因此,找到操作发生的位置,然后在那里添加您需要的任何内容。

  2. 但是,如果由于任何原因这不可能(您使用的是复杂的插件或找不到任何“回调”可能性),那么我建议的 jQuery 方法是:

    一个。对于简单的 DOM 操作,使用 jQuery 链接和遍历,$("#content").html('something').end().find(whatever)....

    如果您想做其他事情,请使用bind带有自定义事件的jQuerytriggerHandler

    $("#content").html('something').triggerHandler('customAction');
    
    $('#content').unbind().bind('customAction', function(event, data) {
       //Custom-action
    });
    

这是 jQuery 触发器处理程序的链接:http : //api.jquery.com/triggerHandler/

+1“找到操作发生的位置,然后在那里添加您需要的任何内容。” 在没有任何黑客/插件的情况下在 2 秒内解决了我的问题:)
2021-03-18 21:23:58
最后的想法。虽然上面应该很全面:您可以使用#content html 的值更新隐藏输入字段的值,然后将更改事件绑定到隐藏输入字段:) 很多选项
2021-03-28 21:23:58
我在这里建议的唯一更改bind是期望您的处理程序返回一个bool.
2021-04-03 21:23:58

这些是突变事件

我没有在 jQuery 中使用过突变事件 API,但是粗略的搜索使我在 GitHub 上找到这个项目我不知道该项目的成熟度。

这个突变事件插件将不起作用,因为它只是将事件挂钩到 jQuery 突变方法中。当 jQuery 本身尝试更改元素时会触发它们,但不会在元素从 jQuery 外部更改时触发。他们不会查看文档的更改。请查看这个小插件:stackoverflow.com/questions/3233991/jquery-watch-div/...
2021-03-19 21:23:58
在谷歌上搜索并发布指向您从未尝试过的图书馆的链接并不是很有用。(评论是因为我在投票时被提示。)
2021-03-21 21:23:58
不推荐使用突变事件不要使用它们。
2021-04-05 21:23:58
突变事件的替代方案似乎是MutationObservers
2021-04-09 21:23:58

浏览器不会触发<div>元素的 onchange 事件

我认为这背后的原因是这些元素不会改变,除非被 javascript 修改。如果您已经不得不自己修改元素(而不是用户自己修改),那么您可以在修改元素的同时调用相应的随附代码,如下所示:

 $("#content").html('something').each(function() { });

您还可以手动触发这样的事件:

 $("#content").html('something').change();

如果这些解决方案都不适用于您的情况,能否请您提供更多有关您具体要完成的工作的信息?

正是我所需要的。
2021-03-13 21:23:58
这假设您已经编写了所有 javascript,但情况可能并非如此。
2021-04-01 21:23:58
谢谢!!!!这只是帮助我解决了一个我一直盯着 6 个小时的问题。
2021-04-04 21:23:58

http://jsbin.com/esepal/2怎么样

$(document).bind("DOMSubtreeModified",function(){
  console.log($('body').width() + ' x '+$('body').height());
})

此事件已被弃用,取而代之的是Mutation Observer API

不错的主意,虽然我想知道它有多少支持。developer.mozilla.org/en/DOM/DOM_event_reference/...
2021-03-17 21:23:58
您如何监控特定元素的变化?目前文件监控整个页面。
2021-03-29 21:23:58

尝试绑定到DOMSubtreeModified事件 seeign,因为测试也只是 DOM 的一部分。

在 SO 上看到这篇文章:

How-do-i-monitor-the-dom-for-changes