这个问题与这个问题有关Clear all setIntervals
我在每个函数中使用setinterval,

var allIntervals = [];
$(".elements").each(function() {
    var myInterval = setInterval(function() {
        // code that changes $(this)
    });
   allIntervals.push(myInterval);
});

然后我把所有的间隔都清除掉
jQuery.each(allIntervals, function(index) {
    window.clearInterval(allIntervals[index]);
});

现在我意识到我想清除不再在DOM中的元素的间隔。
那么,如何将setIntervals链接到每个()元素,然后检查该元素是否仍在DOM中,如果不在,则清除与该元素关联的间隔?

最佳答案

您可以将超时时的ID为的元素存储在一个对象中,但是您必须再次检查它是否在DOM中,因为存储的元素不会神奇地与变量分离,它只是不再在DOM中。

var allIntervals = [];

$(".elements").each(function(i, el) {
    var myInterval = setInterval(function() {
        // stuff
    }, 1000);
   allIntervals.push({id : myInterval, elem : this});
});


$.each(allIntervals, function(index, item) {
    if ( $(document).find(item.elem).length === 0 ) window.clearInterval(item.id);
});

FIDDLE

07-28 11:41