JS 如何知道文档已经改变

当一个DOM文档通过Ajax或者其他方式改变文档结构后(如增加一个div等等),我如何知道文档已经改变

比如在同一个页面里面
我用ajax加了一个Div
然后页面没有刷新 另外一段js里面判断页面是否已经更改

我想做个简单的JQuery的
JQuery里面用了缓存 [u]如果页面没有改变[/u]同一个查询会先从缓存里面查起

这个问题我以前学习过
我记得完成这个有浏览器兼容性问题,
John Resig大侠提出了一个解决方案,参见
http://ejohn.org/blog/thoughts-on-queryselectorall/
可以参考peppy.js里面的一段代码
[code="js"]
// From John Resig -> http://ejohn.org/blog/thoughts-on-queryselectorall/
// Copyright 2008, John Resig (http://ejohn.org/)
// released under the MIT License
if ( doc.querySelectorAll ) {
(function(){
var oldpeppy = peppy.query;

        peppy.query = function(sel, context){
            context = context || doc;
            if ( context === doc ) {
                try {
                    return context.querySelectorAll(sel);
                } catch(e){}
            }

            return oldpeppy.apply(oldpeppy, arrayIt(arguments));
        };
    })();
} else {
    // If the DOM changes we need to clear the cache because it will no longer be reliable. 
    // Inspired by code from Sizzle -> http://github.com/jeresig/sizzle/tree/master.
    // Copyright 2008, John Resig (http://ejohn.org/)
    // released under the MIT License   
    var aEvent = doc.addEventListener || doc.attachEvent;
    function clearCache(){ cache = {}; }
    aEvent("DOMAttrModified", clearCache, false);
    aEvent("DOMNodeInserted", clearCache, false);
    aEvent("DOMNodeRemoved", clearCache, false);    
}

[/code]
当然这里的doc,根据上下文就是document了。
也就是说本来W3C组织是给出了标准的也就是
DOMAttrModified
DOMNodeInserted
DOMNodeRemoved
三个事件,不过IE不支持,好在John Resig大侠给出了这个方法,我没有详细测试过,这个需要你自己试试了

在ajax加的时候自己做个标志咯...
或者缓存以前的dom,做对比

对新加的DOM元素加标记之类的,比如新加的DIV的class属性都是xxx-new之类的,你用jquery一查就知道有没有新增了。

你可以每次增加一个div等的时候,再做一些特殊处理,比如记录增加的这个div在作为全局缓存里
var GlobalCache={};

function addDiv()
{
//增加一个div
。。。。。

GlobalCache[div.id] = div;

}

然后你就可以看GlobalCache是否有元素可以确定dom是否改变了