【发布时间】:2013-06-07 11:50:53
【问题描述】:
我必须迭代一组具有<li>s 的<ul> 并根据输入的单词对其进行过滤。基于 id 的第一个代码运行良好。但问题是我们有重复的 ID,这破坏了过滤器。因此,我为班级分配了 ID 并进行了班级选择,现在它运行良好但有一些问题。主要问题是类选择过滤器比 Id 选择过滤器慢。因为它是一个很大的列表,所以在迭代类名时我会遇到缓慢的问题。有什么办法可以让它更快吗?我也想知道为什么选课慢!
这是我基于 id 迭代的代码:
$.each(propertiesList, function () {
var item = $("#" + this.id).parent();
if(this.property.toLowerCase().indexOf(value.toLowerCase()) === -1) {
item.addClass('no-match');
}
else {
item.parents('.root-property-category').show().addClass('expanded').children('ul').show();
item.removeClass('no-match');
}
});
这是基于类的迭代:
$.each(propertiesList, function () {
var item = $("#available-properties [class*='" + this.id + "']").parent();
if(this.property.toLowerCase().indexOf(value.toLowerCase()) === -1) {
console.log(item)
item.addClass('no-match');
}
else {
console.log(item)
item.parents('.root-property-category').show().addClass('expanded').children('ul').show();
item.removeClass('no-match');
}
});
【问题讨论】:
-
我认为类选择总是比ID选择慢。如果您尝试按标签选择,然后对结果运行按类选择,您可能会得到更好的结果。
-
谢谢@StMotorSpark 我会努力的..
-
“但问题是我们有重复的 ID……”无论如何你都应该解决这个问题。它是无效的 HTML,会永远给您带来问题。
-
谢谢@AndrewMarshall,是的,我同意.. 这是一个巨大的列表,如果我更改课程,它可以工作,但是过程太慢并且浏览器接缝被绞死......正如你所说我可能必须使用网络服务更改过滤。
标签: jquery performance selector