这个问题与这个问题有关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