首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery监视div

jQuery监视div
EN

Stack Overflow用户
提问于 2010-07-13 11:29:53
回答 6查看 26.8K关注 0票数 31

如果div中的内容发生变化,有什么方法可以观察吗?

假设我有:

代码语言:javascript
运行
复制
<div id="hello"><p>Some content here</p></div>

在5秒后的某一时刻,它会变成:

代码语言:javascript
运行
复制
<div id="hello"><ul><li>This is totally different!</li></ul></div>

如何通过回调或其他方式通知我这个问题?在大多数情况下,我可以让执行插入的javascript告诉我。但我想知道这是否可能。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-07-13 14:20:57

jQuery .change()方法仅适用于表单域。

我为你写了一个小的jQuery插件:

代码语言:javascript
运行
复制
<!-- jQuery is required -->

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>


<!-- this is the plugin -->

<script>
  jQuery.fn.contentChange = function(callback){
    var elms = jQuery(this);
    elms.each(
      function(i){
        var elm = jQuery(this);
        elm.data("lastContents", elm.html());
        window.watchContentChange = window.watchContentChange ? window.watchContentChange : [];
        window.watchContentChange.push({"element": elm, "callback": callback});
      }
    )
    return elms;
  }
  setInterval(function(){
    if(window.watchContentChange){
      for( i in window.watchContentChange){
        if(window.watchContentChange[i].element.data("lastContents") != window.watchContentChange[i].element.html()){
          window.watchContentChange[i].callback.apply(window.watchContentChange[i].element);
          window.watchContentChange[i].element.data("lastContents", window.watchContentChange[i].element.html())
        };
      }
    }
  },500);
</script>



<!-- some divs to test it with -->

<p>Testing it:  (click on divs to change contents)</p>

<div id="a" onclick="$(this).append('i')">Hi</div>
<div id="b" onclick="$(this).append('o')">Ho</div>
<div class="c" onclick="$(this).append('y')">He</div>
<div class="c" onclick="$(this).append('w')">He</div>
<div class="c" onclick="$(this).append('a')">He</div>




<!-- this is how to actually use it -->

<script>
  function showChange(){
    var element = $(this);
    alert("it was '"+element.data("lastContents")+"' and now its '"+element.html()+"'");
  }

  $('#a').contentChange(function(){  alert("Hi!") });
  $('div#b').contentChange( showChange );
  $('.c').contentChange(function(){  alert("He he he...") });
</script>

请注意,此操作仅监视元素(html)内容的更改,而不是属性。

票数 63
EN

Stack Overflow用户

发布于 2010-07-13 14:37:17

当HTML/DOM内容改变时,不会触发原生jQuery/DOM事件。

你可以(如果你觉得特别浪费)这样做:

代码语言:javascript
运行
复制
$(function() {
  var $div = $("#hello");
  var html = $div.html();
  var checking = setInterval(function() {
    var newhtml = $div.html();
    if (html != newhtml) {
      myCallback();
      html = newhtml;
    }
  },100);

  function myCallback() {
    alert('content changed!');
    // if you only want it to fire once, uncomment the following:
    // clearInterval(checking);
  }
});

请记住,每隔100ms调用一次.html()可能不是提高站点性能的最佳选择。

jsFiddle mockup

票数 8
EN

Stack Overflow用户

发布于 2011-10-24 01:35:33

也许,监控修改图层内容的事件源是合理的?比方说,在内容可能发生变化之后,用户点击了任何地方(读为“做了一次点击”)。因此,如果您在单击之后检查.html(),而不是使用循环-它可能会节省一些系统资源。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3233991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档