在IE中使用'not'的JQuery Performance问题

时间:2012-01-30 10:36:03

标签: jquery performance

当我每次使用jquery并且不在每个内部时调用会对IE浏览器产生性能影响时出现错误,“停止运行脚本”。

使用$("li:not(.sel)", this).hide();语句来解决性能问题。

尝试使用$("li", this).not(".sel").hide(); $("li[class != sel]", this).hide();

当我使用$("li[class != sel]", this).hide();时,在IE8中处理了性能而没有收到停止脚本消息。

在FF中,三者都完美无缺。

在IE7中获取所有三个的“停止运行脚本”消息。

请帮我解决这个问题。

提前致谢。

修改 这些li是eBay中的过滤选项列表。 默认情况下,我首先只显示5个li。当我点击过滤器下的“选择更多”链接时。我打开一个模态窗口并选中复选框中的选项列表,然后在提交时我将'sel'类附加到选定的li。最后在逻辑中没有'sel'的li被隐藏了。这些li可以超过400或更少。取决于数据。用户有权选择所有的li。

感谢您的回复。请给我一些想法:)

1 个答案:

答案 0 :(得分:1)

嗯,这显然是一个性能问题。我的猜测是因为jQuery在循环之前首先收集所有项目的列表。

我认为jQuery中没有办法避免这种情况,因此我建议不要使用jQuery而是使用常规DOM方法来循环遍历项目:

var item = this.firstChild; // Assuming "this" is the parent of the list items
while (item) {
  $(item).filter(":not(.sel)").hide();
  item = item.nextSibling;
}

我再次在循环中使用jQuery,这更简单,但也更慢。您可能还需要回退到DOM方法:

if (item.tagName == "LI" && item.className != "sel") {
  item.style.display = "none";
}