我正在等待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