setTimeout()函数不在jQuery each()函数内部工作

时间:2014-05-08 23:56:18

标签: jquery delay settimeout each

我想将代码应用于一系列匹配的元素,每个元素之间有延迟。我不明白为什么下面的代码不起作用:

        jQuery(".myElement").each(function() {
            setTimeout(function() {
                jQuery(this).remove();
            }, 1000);
        });

我知道有类似的问题,但答案对我没有用。我知道这段代码同时将延迟应用于每个匹配的元素,这不是我想要的。但我仍然无法弄清楚如何使其发挥作用。

3 个答案:

答案 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);
});