【发布时间】:2013-10-04 23:25:57
【问题描述】:
我有以下 jQuery 代码,用于根据选项是否具有 active=F 或 active=T 自定义属性来隐藏/显示选项。 It works great, however when the select contains a lot of options, it takes 10 seconds or more sometimes to finish and causes the page to lock up.有人能指点我如何优化这段代码吗?
$(document).ready(function() {
$.fn.toggleOption = function( show ) {
return this.each(function(){
$(this).toggle(show);
if(show){
if($(this).parent('span.toggleOption').length) $(this).unwrap();
$('#unitsSelector').val("");
} else {
$(this).wrap('<span class="toggleOption" style="display: none;" />');
$('#unitsSelector').val("");
}
});
};
var list = $('#unitsSelector option'), buttons = $('.unitToggle');
list.toggleOption(false);
buttons.on('click', function () {
var filter = $(this).hasClass('active') ? "[active=F]" : "[active=T]";
list.toggleOption(true).filter(filter).toggleOption(false);
});
$('.active').click();
});
谢谢!!!
更新
这里有小提琴
您会注意到,当从活动/非活动切换时,需要几秒钟才能完成。
【问题讨论】:
-
我对这个问题的答案很感兴趣。我有一个类似的问题,模糊 5 个输入字段,大约需要 3 秒!你试过 e.stopPropagation();顺便一提?会冒泡吗?
-
我没试过e.stopPropagation(),不熟悉。不过现在正在调查。
-
您的意思是除了在同一个函数中调用
$(this)4 次,而不是将其存储为局部变量并重新使用它? -
你能设置一个可重现的小提琴示例吗?
-
@Phil 试一试...我删除了包装/展开,但选项隐藏和显示,而且速度要快得多。 jsfiddle.net/MTn8p
标签: javascript jquery optimization