2012-04-26 54 views
7

我正在等待document.ready事件,以便在我的頁面上執行某些操作。等到HTML元素得到一個類,然後做點什麼

唉,其他一些我無法改變的腳本,一旦我的腳本被調用,還沒有發揮它的魔力。因此,類名上的jquery選擇失敗,因爲該類尚不存在於DOM中。

這就是爲什麼我要告訴我的函數要聽,直到一個元素獲得某個類,然後用它做一些事情。

我該如何做到這一點?

+0

你控制這個其他腳本嗎?你不能把你的代碼作爲其他代碼的回調嗎? – j08691 2012-04-26 13:50:50

+0

或獲取其他腳本來觸發自定義事件 – rgvcorley 2012-04-26 13:51:39

+0

看起來像這個問題的重複:http://stackoverflow.com/questions/1950038/jquery-fire-event-if-css-class-changed – 2012-04-26 13:52:16

回答

3

一旦你添加了類,你可以觸發一些事件。

例子:

$('#ele').addClass('theClass'); 
$(document).trigger('classGiven') 


$(document).bind('classGiven',function(){ 
    //do what you need 
}); 
12

像這樣(僞代碼):

var timer = setInterval(function() { 
    if (element.className=='someclass') { 
     //run some other function 
     goDoMyStuff(); 
     clearInterval(timer); 
    } 
}, 200); 

或監聽元素插入:

function flagInsertedElement(event) { 
    var el=event.target; 
} 
document.addEventListener('DOMNodeInserted', flagInsertedElement, false); 

jQuery的版本:

$(document).on('DOMNodeInserted', function(e) { 
    if (e.target.className=='someclass') { 
     goDoMyStuff(); 
    } 
}); 

另外還有liveQuery插件:

$("#future_element").livequery(function(){ 
    //element created 
}); 

或者,如果這是一個常規的事件處理程序,使用jQuery的on();

+0

計時器的方法就像一個魅力。 – k0pernikus 2012-04-26 14:07:05

+0

對此有三個看法,但是像這樣簡單的setInterval並沒有使用太多的資源並且工作得很好,但是如果從未找到類,就應該有某種結局,比如超時函數在幾秒之後清除間隔。用於監聽插入的DOM節點的jQuery函數可能是最好的方法,但除非處理程序被刪除,否則將繼續執行,檢查所有插入的className元素,在我看來,這比setInterval更糟糕。 – adeneo 2012-04-26 14:13:06

+0

@ adeneo偉大的回覆,做得好,謝謝:) – 2015-06-23 21:08:03

0

我很抱歉,如果我得到你的問題錯了,但爲什麼不只是在做對的document.ready普通的東西,因爲這? :

$("#myelement").addClass('myclass'); 

if($("#myelement").hasClass('myclass')) { 
    alert('do stuff here'); 
} 
+0

我不添加這個類的元素。它被另一個腳本添加。我想抓住這個變化,然後對它做一些魔術。 – k0pernikus 2012-04-26 13:59:30

+0

所以也許會更好,如果可能的話,在另一個腳本中添加回調? – Vytautas 2012-04-26 14:05:13

相關問題