2011-05-17 41 views
13
<div class="current"></div> 
<a href="#">text</a> 

如何检测何时一个.live类被添加到这个<div>并做了一些事情发生时?如何检测HTML元素的类何时更改?

例如,如果类更改,则隐藏链接。

我有一个缩小的脚本,它对<div>的班级进行了更改。对于我来说找到它发生的地方实在太大了,所以我正在寻找一些方法来抓住班级变化。

+0

哪块? '.current'? – Neal 2011-05-17 16:41:29

+2

一个微不足道的方法是使用'setInterval'来简单地检查每一个毫秒的差异。 – pimvdb 2011-05-17 16:44:58

回答

12

有DOM事件,但它们并不完美,在大多数浏览器中都不可用。换句话说:不可能(可靠地)。在每次迭代中都会有像间隔这样的黑客攻击,但是如果你需要这样做,你的设计可能就会被搞砸了。请记住,这样的事情会很慢,而且总会有延迟。延迟越小,应用程序越慢。不要那样做。

+0

我记不得了,但是我在一篇关于Mozilla Dev Central的文章中提到,他们警告不要使用这些事件(主要是性能问题)。 – sitifensys 2011-05-17 17:26:54

+0

这不是真的,它是可能的,可靠的,它只是要求你听任何和所有的DOM事件并将其过滤掉。在你的情况下特别收听身体的孩子$(document).on(“EVENT”,“body *”,function());这将是一个昂贵的操作,所以我会建议反对,但它肯定可能和可靠 – 2015-08-04 15:16:26

+0

@TobiasHagenbeek:你会侦听哪个事件来检测类属性更改?就我所知,on()利用事件冒泡来检测元素的子元素中的事件 - 而不是DOM变化。但是,如果浏览器DOM事件不可靠(它们在编写本文时肯定是这样),那么这将无助于完成OP所要求的内容,而不会诉诸间隔黑客行为。其中一些情况可能已经发生变化,所以我真的很好奇这将如何实现。请详细说明。 – jwueller 2015-08-06 23:12:33

2

我不知道你添加到链接的类是否总是相同,但如果是这样,为什么你不用这个使用CSS。

<style type='text/css> 
    .myaddedclass{display:none} 
</style> 
+0

是的@Rooney,如果你想要隐藏/显示元素,改变颜色或其他属性等等,然后只需要在你添加的类上定位CSS,而不必监视这些变化,CSS就会为你做这些,这就是我如何处理hide/show,标记“当前选中”行,以及类似的问题 – 2011-05-18 01:04:02

2

如果你只需要弄清楚一次(即不是在代码中),谷歌浏览器的网络检查器就会显示DOM变化。不知道这是否会帮助你解决问题。

+3

+1你也可以右键单击(在元素选项卡中)的节点并单击“断开属性修改” - 这应该停止JS在正确的行(取消缩小它以获得更好的换行符:http://jsbeautifier.org/) – peteorpeter 2011-05-17 18:56:25

+0

@peteorpeter:哦,这真的很方便,我不知道这一点。 – 2011-05-18 00:52:09

+0

我只是自己找到它(谁知道它已经存在多久了 - 偷偷摸摸的Chrome更新...) – peteorpeter 2011-05-18 12:23:17