2011-05-17 70 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