除了使用定时器随时间计数元素并查看更改之外,我想不出更好的模拟此事件的方法。
是否有某种专有 IE 版本的 DOMNodeInserted?谢谢。
除了使用定时器随时间计数元素并查看更改之外,我想不出更好的模拟此事件的方法。
是否有某种专有 IE 版本的 DOMNodeInserted?谢谢。
propertychange
事件,它会在元素属性或CSS属性发生变化时触发。它会在直接更改元素的innerHTML
属性时触发,但不会在通过其他方式更改元素内容时触发(例如使用DOM方法如appendChild()
或更改子元素的innerHTML
)。你可以覆盖所有DOM操作方法-appendChild、insertBefore、replaceChild、insertAdjacentHTML等,并使用onpropertychange监视innerHTML。
你可能能够想出一个满足你要求的解决方案。
顺便说一下,似乎DOMNodeInserted等方法将被浏览器弃用。详情请参见http://www.w3.org/TR/DOM-Level-3-Events/#events-mutationevents。
在IE中能够使用onreadystatechange。必须通过htc将DHTML行为附加到元素上,但htc文件不一定需要存在:
if (!!document.addEventListener)
{
$(domnode).get(0).addEventListener("DOMNodeInserted", fixtext, false);
}
else
{
$(domnode).get(0).addBehavior("foo.htc");
$(domnode).get(0).attachEvent("onreadystatechange", fixtext);
}
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建议的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事件。
看起来,在IE中可以使用DHTML Behaviors来模拟DOMNodeInserted
。