This is code that listens for mutations on the childlist of #foo
and checks to see if a child with the id of bar
is added.
MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
$("#foo").live("click",function(e) {
e.preventDefault();
$(this).append($("<div />").html("new div").attr("id","bar"));
});
// define a new observer
var obs = new MutationObserver(function(mutations, observer) {
// look through all mutations that just occured
for(var i=0; i<mutations.length; ++i) {
// look through all added nodes of this mutation
for(var j=0; j<mutations[i].addedNodes.length; ++j) {
// was a child added with ID of 'bar'?
if(mutations[i].addedNodes[j].id == "bar") {
console.log("bar was added!");
}
}
}
});
// have the observer observe foo for changes in children
obs.observe($("#foo").get(0), {
childList: true
});
However, this only observes #foo
. If you want to look for the addition of #bar
as a new child of other nodes, you need to observe those potential parents with additional calls to obs.observe()
. To observe a node with the id of baz
, you might do:
obs.observe($('#baz').get(0), {
childList: true,
subtree: true
});
The addition of the subtree
option means that the observer will look for the addition of #bar
as either a child or a deeper descendant (e.g. grandchild).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…