If i change the innerHTML property to the document.documentElement
document.documentElement.__defineSetter__("innerHTML", function() { ... });
How to inherit this new setter to all child objects and the objects subsequently created in the DOM?
答案 0 :(得分:1)
您需要更改innerHTML
原型上的Element
属性,以使其对DOM中的所有实例生效。
虽然这有点不明智,因为你最终肯定会破坏DOM API的一些核心功能。
您可以创建自己的隐藏原始属性的属性,而不是直接更改innerHTML
。如果确实想要使用标准DOM API,那么您应该能够从第一个示例中弄清楚如何。
设置器:
function innerHTMLEvent () {
alert(this.innerHTML);
}
Object.defineProperty(Element.prototype, 'innerHTMLWithEvent', {
set: function (v) {
this.innerHTML = v;
innerHTMLEvent.call(this);
}
});
document.getElementById('thing').innerHTMLWithEvent = 'Yo.';
<div id="thing"></div>
方法(更灵活):
function innerHTMLEvent () {
alert(this.innerHTML);
}
if (!Element.prototype.hasOwnProperty('innerHTMLWithEvent')) {
Element.prototype.innerHTMLWithEvent = function (v, fn) {
this.innerHTML = v;
fn.call(this);
};
}
document.getElementById('thing').innerHTMLWithEvent('Yo.', innerHTMLEvent);
<div id="thing"></div>
还应注意__defineSetter__
是非标准的并且已弃用。罕见的双重原因不使用它。