监控当前页面的DOM变化,比如一个div区域的属性变化、innerHTML变化、绑定事件变化等,若发生变化后,通知某个方法,开始执行某些操作。简言之,能否实现类似input的onchange事件?将该事件移到DIV区域上?javascript事件

解决方案 »

  1.   

    因为我不清楚对方何时改变啊,比如通过ajax请求从网络获得数据,这些ajax是原系统实现的,我只想在原网页上增加一段独立的JS,实现内容监控。
      

  2.   

    浏览器没提供这个功能不知道你原系统的ajax是怎么写的,如果用的jquery,可以写一个全局ajax回调函数,这样所有通过jquery发起的ajax请求都会调用这个回调;如果是用的另外的ajax函数,并且没有提供全局回调的配置,那么就重写该ajax函数,增加这个回调,举例,原ajax函数为doajax
    则重写为 
    var oldajax = doajax;
    doajax = function(cfg){
        var oldcallback = cfg.callback;
        cfg.callback = function(res){
           if(QJcallback) {
               QJcallback(res);
           }
           if(oldcallback) {
               oldcallback(res);
           }
        }
    }
    当然若用的原生ajax,则无办法
      

  3.   

    因为我不清楚对方何时改变啊,比如通过ajax请求从网络获得数据,这些ajax是原系统实现的,我只想在原网页上增加一段独立的JS,实现内容监控。
    那就没办法了,要不你自己去实现一个吧
      

  4.   

    写掉一句var oldajax = doajax;
    doajax = function(cfg){
        var oldcallback = cfg.callback;
        cfg.callback = function(res){
           if(QJcallback) {
               QJcallback(res);
           }
           if(oldcallback) {
               oldcallback(res);
           }
        }
        oldajax(cfg);
    }
      

  5.   

    因为我不清楚对方何时改变啊,比如通过ajax请求从网络获得数据,这些ajax是原系统实现的,我只想在原网页上增加一段独立的JS,实现内容监控。那我就 不断检查这个div中我要关注的内容只要和上次不一样了 就调用某个方法
      

  6.   

    写掉一句var oldajax = doajax;
    doajax = function(cfg){
        var oldcallback = cfg.callback;
        cfg.callback = function(res){
           if(QJcallback) {
               QJcallback(res);
           }
           if(oldcallback) {
               oldcallback(res);
           }
        }
        oldajax(cfg);
    }感谢回答,比较详细,如果通过人工分析代码的方式,如上方法确实可行。我现在的场景是:
    原web系统不知道是哪家公司做的,用的什么框架,我不想去人工分析其JS源码,而希望在原网站中引入一个我们自己实现的JS文件,该JS可以监控某区域变化,若发生变执行某些操作。
      

  7.   

    试试propertychange事件吧.
    不过这个事件存在浏览兼容性问题..
      

  8.   

        function addElem(){
              var d = new Date();
              var div = document.createElement("div");
              div.innerHTML = d.toLocaleDateString();
              document.body.appendChild(div);
          }
          window.onload = function(){
              window.setInterval(addElem,1000);
          }请问,你给我写的这个代码,只能在IE下运行,在火狐下不可以运行.
      

  9.   

    最好是 改变时,调用你的函数还可以用setInterval 去监视是否改变
      

  10.   

    setInterval(function() {
      var $textArea = $('input[type=\"textarea\"]');
      $textArea.html() = $('divId').html();
      $textArea.change(function() {
        alert('变化了');
      });
       
    }, 0);
      

  11.   


    我刚下载了一个firefox,测试是可以正常运行的;另外,该问题和本贴内容无关,请不要在这里讨论,还是在原贴处沟通吧。
      

  12.   


    属性可以setInterval来定时检查,事件么有搞。。就算input的onchange也监控不到事件
      

  13.   

    有些事件是需要浏览器来支持的,需要自己监控div的内容来实现的吧,或者如果能控制内容页面的话,可否通过样式把input调整为一个你需要的样子,这样就可以使用onchange方法