JavaScript inherit DOM property to all objects and following

时间:2015-07-08 15:43:42

标签: javascript html dom

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?

1 个答案:

答案 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__是非标准的并且已弃用。罕见的双重原因不使用它。