innerHTML上的__defineSetter__使其无法渲染

时间:2010-05-27 10:14:07

标签: javascript innerhtml watch

我正在尝试为属性创建一个监视方法,在更改属性时使用__define[GS]etter__。当我设置值时它反应很好,但是如果属性监听的是innerHTML,它在某种程度上无法呈现给定的字符串。所以基本上,当我向innerHTML添加内容时,它不显示。

我使用上一个问题中描述的监视方法: Watch for object properties changes in JavaScript

我可能因为不听内部HTML变化,但我也想知道__defineSetter__是否会以某种方式阻止设置值的原始处理。

谢谢!

3 个答案:

答案 0 :(得分:0)

该填充码实际上并不是直写:当您设置属性时,该值仅在监视包装器上记住,而不会传递给底层对象。它专为纯JavaScript对象而设计,其属性没有副作用(比如在innerHTML的情况下更改DOM)。

由于无法直接调用原型的setter,因此将其写入是一种痛苦。您必须暂时删除该属性,写入基础属性,然后将其重新放回原位。

然而,追求IMO并​​不值得追求。 DOM节点被允许为“主机对象”,因此无法保证任何本机JavaScript对象属性函数都可以在它们上运行。

(无论如何,在Object原型上添加新成员通常被认为是一个非常糟糕的主意。)

  

我可能因为不听内部HTML变化

我认为这是最好的,是的。

答案 1 :(得分:0)

好的更新。 我在MSDN上找到了这个页面,它正是我需要的: http://msdn.microsoft.com/en-us/library/dd229916(VS.85).aspx

但是Object.getOwnPropertyDescriptor做事的方式显然只适用于IE。游民。任何想法都将不胜感激。

答案 2 :(得分:0)

我找到了另一个看起来很有趣的网页,但我无法完全按照自己的意愿去做: http://www.refactory.org/s/recent/tag/accessors

我现在决定找一个解决方法,一个带有计时器的东西,它会检查属性的变化,并为支持它的浏览器改变属性。

但如果有人找到问题plz post的解决方案:)