我正在等待document.ready事件,以便在我的頁面上執行某些操作。等到HTML元素得到一個類,然後做點什麼
唉,其他一些我無法改變的腳本,一旦我的腳本被調用,還沒有發揮它的魔力。因此,類名上的jquery選擇失敗,因爲該類尚不存在於DOM中。
這就是爲什麼我要告訴我的函數要聽,直到一個元素獲得某個類,然後用它做一些事情。
我該如何做到這一點?
我正在等待document.ready事件,以便在我的頁面上執行某些操作。等到HTML元素得到一個類,然後做點什麼
唉,其他一些我無法改變的腳本,一旦我的腳本被調用,還沒有發揮它的魔力。因此,類名上的jquery選擇失敗,因爲該類尚不存在於DOM中。
這就是爲什麼我要告訴我的函數要聽,直到一個元素獲得某個類,然後用它做一些事情。
我該如何做到這一點?
一旦你添加了類,你可以觸發一些事件。
例子:
$('#ele').addClass('theClass');
$(document).trigger('classGiven')
$(document).bind('classGiven',function(){
//do what you need
});
像這樣(僞代碼):
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();
計時器的方法就像一個魅力。 – k0pernikus 2012-04-26 14:07:05
對此有三個看法,但是像這樣簡單的setInterval並沒有使用太多的資源並且工作得很好,但是如果從未找到類,就應該有某種結局,比如超時函數在幾秒之後清除間隔。用於監聽插入的DOM節點的jQuery函數可能是最好的方法,但除非處理程序被刪除,否則將繼續執行,檢查所有插入的className元素,在我看來,這比setInterval更糟糕。 – adeneo 2012-04-26 14:13:06
@ adeneo偉大的回覆,做得好,謝謝:) – 2015-06-23 21:08:03
我很抱歉,如果我得到你的問題錯了,但爲什麼不只是在做對的document.ready普通的東西,因爲這? :
$("#myelement").addClass('myclass');
if($("#myelement").hasClass('myclass')) {
alert('do stuff here');
}
我不添加這個類的元素。它被另一個腳本添加。我想抓住這個變化,然後對它做一些魔術。 – k0pernikus 2012-04-26 13:59:30
所以也許會更好,如果可能的話,在另一個腳本中添加回調? – Vytautas 2012-04-26 14:05:13
你控制這個其他腳本嗎?你不能把你的代碼作爲其他代碼的回調嗎? – j08691 2012-04-26 13:50:50
或獲取其他腳本來觸發自定義事件 – rgvcorley 2012-04-26 13:51:39
看起來像這個問題的重複:http://stackoverflow.com/questions/1950038/jquery-fire-event-if-css-class-changed – 2012-04-26 13:52:16