0

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

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

我可能只是不听 innerHTML 更改,但我也想知道是否以__defineSetter__某种方式阻止了对设置值的原始处理。

谢谢!

4

3 回答 3

0

我发现另一个网页看起来很有趣,但我不能让它做我想做的事: http ://www.refactory.org/s/recent/tag/accessors

我现在决定找到一种解决方法,它带有一个计时器,可以检查属性的更改以及支持该功能的浏览器的属性更改 evnet。

但是,如果有人找到问题的解决方案,请发帖:)

于 2010-05-27T14:30:52.210 回答
0

该 shim 代码实际上并没有直写:当您设置一个属性时,该值仅在 watch-wrapper 上被记住,而不是传递给底层对象。它是为纯 JavaScript 对象设计的,这些对象的属性没有副作用(例如更改 DOM,在innerHTML's 的情况下)。

由于无法直接调用原型的设置器,因此将其写入会很痛苦。您必须暂时删除该属性,写入基础属性,然后将其放回原处。

然而,它并不值得追求 IMO。DOM 节点被允许成为“宿主对象”,因此不能保证任何原生 JavaScript 对象属性函数都可以在它们上工作。

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

我可能只是不听 innerHTML 的变化

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

于 2010-05-27T11:15:51.747 回答
0

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

但这种Object.getOwnPropertyDescriptor做事方式显然只适用于 IE。真可惜。任何想法,将不胜感激。

于 2010-05-27T12:40:30.537 回答