1

可能重复:
是否有 jQuery DOM 更改侦听器?
如何查看 DOM 对象的属性?

有没有办法将事件绑定到非输入类型的元素?例如,将事件绑定到在 href 属性更改时触发的锚元素。

4

3 回答 3

3

click您可以将处理程序绑定到非输入元素( 、mousemove等)上的各种事件。但是,当属性更改时(例如href链接上的属性示例),不会引发(一致的跨浏览器)事件。正如bfavarello指出的那样,某些属性(如src)将导致事件(如load)作为次要事物。

(关于元素的“突变”事件,包括属性更改 [mutations],现在已经过时了,但它从未得到广泛支持。有一个更新的提案,但它也没有 [尚未] 广泛支持。)

当然,您可以使用轮询:保存旧值,并定期(通过setTimeoutsetInterval)检查它是否已更改。除非您要检查很多元素并且需要几乎不断地检查它们,否则这不一定是性能问题。

于 2012-12-10T17:15:26.533 回答
3

DOM Mutation Observers可以做到这一点,但它们非常新,在撰写本文时还没有得到很好的支持。

您是否正在编写扩展程序或类似的东西(即,您不控制修改 DOM 的代码)?这是这些事件最常见的用例之一——您无法控制更改 DOM 的代码。我之前已经将它与在 Chrome 中运行良好的Mutation Summary一起使用。

如果您确实控制了修改 DOM 的代码 - 即您自己在自己的网站上修改属性 - 您可能希望在修改属性时简单地触发您自己的自定义事件。

于 2012-12-10T17:17:01.757 回答
1

您可以将DomSubtreeModified侦听器添加到祖先,或者您可以在 DOM 对象watchsrc属性上使用(如果您正在使用的浏览器支持它)。

myImage.watch("src",function(id, oldval, newval){
    document.write("src changed!");
    return newval;    
});
于 2012-12-10T17:16:15.387 回答