我在每个函数中使用setIntervals,如此,
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链接到each()元素,然后检查该元素是否仍在DOM中,如果没有,则清除与该元素关联的Interval?
答案 0 :(得分:3)
您可以将具有超时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);
});
答案 1 :(得分:0)
使用对象存储信息(将元素和intervalid作为属性),遍历对象并清除DOM元素(如果不可用)的间隔。
$(function() {
var intervals = [];
$(".elements").each(function() {
var myInterval = setInterval(function() {
// code that changes $(this)
});
var obj = new Object();
obj.element = $(this);
obj.intervalId = myInterval;
intervals.push(obj);
});
$.each(intervals, function(index, val) {
console.log(val.element);
if (val.element.length > 0) {
window.clearInterval(val.intervalId);
}
});
});