Jquery 使用';不是';在IE中

Jquery 使用';不是';在IE中,jquery,performance,Jquery,Performance,当我使用jqueryeach并调用notinsideeach时,会对IE浏览器的性能产生影响,错误为“停止运行脚本” 使用,$(“li:not(.sel)”,this.hide()语句获取性能问题 尝试使用$(“li”,this).not(“.sel”).hide()也$(“li[class!=sel]”,this.hide() 当我使用$(“li[class!=sel]”时,this.hide(),在IE8中处理了性能问题,但未获得停止脚本消息 在FF中,这三个都工作得很好 在IE7中,为所有

当我使用jqueryeach并调用notinsideeach时,会对IE浏览器的性能产生影响,错误为“停止运行脚本”

使用,
$(“li:not(.sel)”,this.hide()语句获取性能问题

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

当我使用
$(“li[class!=sel]”时,this.hide(),在IE8中处理了性能问题,但未获得停止脚本消息

在FF中,这三个都工作得很好

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

请帮我解决这个问题

提前谢谢

编辑: 这些是易趣中的过滤选项列表。 默认情况下,我一开始只显示5个li。当我点击过滤器下名为“选择更多”的链接时。我打开一个模式窗口,在复选框中选择选项列表,在提交时,我会将“sel”类附加到所选的li。最后,在逻辑中,没有“sel”的li被隐藏。这些李可以超过400或更少。这取决于数据。用户有权选择所有li


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

好吧,这显然是性能问题。我猜这是因为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";
}

你有多少个
li
?他们中有多少人拥有该类
sel
?感谢您的回复。请检查我的编辑…你能给hidden li分配一个不同的类吗?我知道这并不能解决性能问题,但它会使您的选择器更加具体,您不需要“不”。我在我的逻辑中解决了这个问题。由于逻辑被引用到要隐藏的类,我通过处理最后一个索引将其完全置于循环之外。你的回答给了我一些想法,我接受了。再次感谢。