【问题标题】:detected any changes on the page with jQuery and function .live()?使用 jQuery 和函数 .live() 检测到页面上的任何更改?
【发布时间】:2011-11-02 11:08:07
【问题描述】:
<span id="one"> one </span>
<span id="two"> two </span>


$("#one").mouseover(function(){
   $(this).css('background-color', 'red');
});

$("#two").click(function(){
   $(this).css('background-color', 'green');
});


    if (any changes on the site) {
        alert('changes detected');
    }

如何检测页面上的任何更改?这可能吗?我想使用函数 .live(),但是如何?

我不想单独检查页面上的每个功能。

直播:http://jsfiddle.net/d4PMB/1/

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

您可以使用window.setTimeout(),捕获正文的当前 HTML (document.body.innerHTML) 并将其与之前保存的 HTML 进行比较:

var lastBodyHTML = "";
var changes = 0;

function test() {
    if (lastBodyHTML == "") {
        lastBodyHTML = document.body.innerHTML;
    }

    if (lastBodyHTML != document.body.innerHTML) {
        changes++;
        alert("CHANGE #" + changes);
        lastBodyHTML = document.body.innerHTML;
    }
    window.setTimeout(test, 1000);

};

test();

工作示例:http://jsfiddle.net/d4PMB/7/

【讨论】:

    【解决方案2】:

    你也可以处理DOMAttrModified,它比在你的页面上设置超时更干净......

    查看这个 jsfiddle 示例:http://jsfiddle.net/d4PMB/9/

    仅当 dom 更改时才会显示警报消息,似乎是您想要的,您也可以完全自定义它,使用事件类型。

    【讨论】:

    • 谢谢,您可以将此回复作为其他人的“有效答案”;)
    • 当我通过 Chrome Web Inspector 修改或添加属性或标签时,Google Chrome (16) 中没有警告框。
    • @ComFreek,是的,你是对的:“WebKit 目前不始终支持 DOMAttrModified,因此 Safari 和 Chrome 目前必须使用较慢的 setInterval 机制。”这是一篇很好的文章:west-wind.com/weblog/posts/2011/Feb/22/…
    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 2012-04-15
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 2012-01-03
    • 2021-02-23
    相关资源
    最近更新 更多