2012-04-26 51 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

相关问题