在IE中DOMNodeInserted相当于?

除了使用计时器计算随时间变化的元素数量并寻找变化之外,我想不出一个更好的方法来模拟这个事件。

是否有某种专有的IE版本的DOMNodeInserted? 谢谢。

不,没有。 最近的是propertychange事件,它响应元素的属性或CSS属性的更改而触发。 它响应直接改变元素的innerHTML属性而不是当元素的内容被其他方法改变(例如,通过使用诸如appendChild() DOM方法或者通过改变子元素的innerHTML )。

更新2014年2月6日

正如在评论中指出的,有一个解决方法。 它基于精巧的破解,我build议尽可能使用突变观察者。 有关详细信息,请参阅@ naugtur的答案 。 @ naugtur的答案已被删除,但解决scheme可以在https://github.com/naugtur/insertionQuery

你可以覆盖所有的DOM操作方法 – appendChild,insertBefore,replaceChild,insertAdjacentHTML等等,然后用onpropertychange监视innerHTML。

您可能会想出满足您的要求的解决scheme。

顺便说一下,DOMNodeInserted等将来会被浏览器所弃用。 见http://www.w3.org/TR/DOM-Level-3-Events/#events-mutationevents

onreadystatechange将在IE中工作。 DHTML行为必须通过htc附加到元素,但是htc文件不必存在:

 if (!!document.addEventListener) { $(domnode).get(0).addEventListener("DOMNodeInserted", fixtext, false); } else { $(domnode).get(0).addBehavior("foo.htc"); $(domnode).get(0).attachEvent("onreadystatechange", fixtext); } 

onreadystatechange事件引用

一个肮脏的解决方法是截取Elementtypes的原型方法,如下所示:

 window.attachEvent('onload', function() { invokeNodeInserted(document); (function(replace) { Element.prototype.appendChild = function(newElement, element) { invokeNodeInserted(newElement); return replace.apply(this, [newElement, element]); }; })(Element.prototype.appendChild); (function(replace) { Element.prototype.insertBefore = function(newElement, element) { invokeNodeInserted(newElement); return replace.apply(this, [newElement, element]); }; })(Element.prototype.insertBefore); (function(replace) { Element.prototype.replaceChild = function(newElement, element) { invokeNodeInserted(newElement); return replace.apply(this, [newElement, element]); }; })(Element.prototype.replaceChild); }); 

按照Paul Sweatte的build议使用onreadystatechange实际上并不奏效。 readystatechange事件仅在加载foo.htc时触发。 它与更改DOM节点无关。

我已经设置了一个小提琴来演示它。 看看http://jsfiddle.net/Kermit_the_frog/FGTDv/或http://jsfiddle.net/Kermit_the_frog/FGTDv/embedded/result/

HTML:

 <input type="button" id="fooBtn" value="add" /> <div id="fooDiv"></div> 

JS / jQuery的:

 function bar(e) { var state = $('#fooDiv').get(0).readyState; alert (state); } $("#fooBtn").on("click", function(){ $('#fooDiv').get(0).addBehavior("foo.htc"); $('#fooDiv').get(0).attachEvent("onreadystatechange", bar); }); 

正如你所看到的:即使没有DOM操作,还有一个readystatechange事件。

看来,DHTML行为可以在IE中用来DOMNodeInserted