我想将代码应用于一系列匹配的元素,每个元素之间有延迟。我不明白为什么下面的代码不起作用:
jQuery(".myElement").each(function() {
setTimeout(function() {
jQuery(this).remove();
}, 1000);
});
我知道有类似的问题,但答案对我没有用。我知道这段代码同时将延迟应用于每个匹配的元素,这不是我想要的。但我仍然无法弄清楚如何使其发挥作用。
答案 0 :(得分:2)
无需.each
setTimeout(function() {
jQuery(".myElement").remove();
}, 1000);
现在工作的原因是因为this
不再引用each
中的元素 - 您可以设置一个上下文变量,但是因为您仍然只是删除元素,只是一举做好!
答案 1 :(得分:1)
<强> JSBIN DEMO 强>
你的问题在于你正在调用jQuery(this).remove()并将this的返回值传递给你的setTimeout。假设您打算在超时到期时运行此操作。如果是这种情况,则需要将其包装在一个函数中,以便该函数将传递给setTimeout并在计时器到期时执行。
jQuery('.myElement').each(function() {
var thiz = jQuery(this);
setTimeout(function() { thiz.remove(); }, 1000);
})
答案 2 :(得分:1)
感谢您的回答。无论出于何种原因,我无法让他们中的任何一个工作。但是,这段代码最终为我完成了这项工作:
jQuery(".element").each( function(e) {
var element = jQuery(this);
setTimeout(function () {
jQuery(element).remove();
}, e*1000);
});