函数崩溃,因为太多迭代jQuery
Function crashing because of so many iterations jQuery
我有一个大约 300 div
的页面,我切换他们的 css,使它们要么 100% 宽,要么说 200 像素。当只有 10 个左右的div 时,我的函数可以正常工作,但现在有这么多,我的函数似乎崩溃了。
谁能解释为什么会发生这种情况或"增强"我当前的功能?
$('.grid').click(function () {
$('.vacancy').animate({ opacity: 0 }, 500, function () {
$(".vacancy").switchClass("listview", "gridview", 100);
$(".vacancy").stop().animate({ opacity: 1 }, 500);
$('a.gridView').removeClass('grid-active');
$('a.listView').addClass('list-active');
});
return false;
});
$('.list').click(function () {
$('.vacancy').animate({ opacity: 0 }, 500, function () {
$(".vacancy").switchClass("gridview", "listview", 100);
$(".vacancy").stop().animate({ opacity: 1 }, 500);
$('a.gridView').removeClass('grid-active');
$('a.listView').addClass('list-active');
});
return false;
});
回调函数为每个动画元素触发。
如果您有 300 个.vacancy
div,回调将执行 300 次。每次执行回调时,都会为 300 个元素调用 $(".vacancy").switchClass()
。300 x 300 是...好多。
您可以从在回调中使用this
开始:
$('.grid').click(function () {
$('.vacancy').animate({ opacity: 0 }, 500, function () {
$(this).switchClass("listview", "gridview", 100);
$(this).stop().animate({ opacity: 1 }, 500);
$('a.gridView').removeClass('grid-active');
$('a.listView').addClass('list-active');
});
return false;
});
您需要一些其他方法来减少调用其他两行的次数,但是如果没有html,我无法说出解决方案是什么。
这是一个演示的小提琴:http://jsfiddle.net/jkcY3/
$.fn.logMe = function() {
return this.each(function() {
console.log('logMe called', this);
});
};
$('.vacancy').animate({ opacity: 0 }, 500, function() {
$('.vacancy').logMe();
});
如果我有 300 个div,我会接到 90000 个电话给logMe()
;
相关文章:
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 正在停止.在jquery中的特定时间间隔内,每次迭代的每次执行
- jQuery-迭代不正确?(太长,无法执行)
- 如何在Jquery中迭代JSON数组
- 如何使用jQuery迭代id名称的变体(如idname1、idname2)
- 如何在我传递给视图的ViewModel集合中获得jQuery可选对象的值,以作为有序列表进行迭代
- jQuery eq()导致无限迭代
- JS对象->来自jquery ajax的JSON提交->php迭代
- jQuery:尝试迭代选择选项值
- 函数崩溃,因为太多迭代jQuery
- 快速从 2D 数组获取索引,无需迭代 jquery
- 如何迭代jquery选择器的结果
- 正在迭代jquery对象
- 使用accumulator迭代jquery对象
- 迭代Jquery中启用的选项卡
- 在Chrome中迭代jQuery JSON对象,它改变了顺序
- 迭代jQuery集合,而不必重新构建jQuery对象
- 迭代jQuery数组
- 如何迭代jquery.map的输出
- 如何将.delay添加到.点击.每次迭代(jquery)