【发布时间】:2012-08-09 03:38:50
【问题描述】:
我有一个自动完成表单,用户可以在其中输入一个术语,它会隐藏所有不包含该术语的 <li> 元素。
我最初使用 jQuery 的 each 遍历所有 <li> 并将 .hide() 应用于不包含该术语的那些。这太慢了。
我发现一种更快的方法是遍历所有<li> 并将.hidden 类应用于所有需要隐藏的部分,然后在循环结束时执行$('.hidden').hide()。不过,这感觉有点骇人听闻。
一种可能更快的方法可能是使用document.styleSheets 重写.hidden 类的CSS 规则。谁能想到更好的办法?
编辑:让我澄清一些我不确定太多人知道的事情。如果您在循环的每次迭代中更改 DOM,并且该更改会导致页面被重绘,那么这将比“准备”所有更改并在循环完成时立即应用它们要慢得多。
【问题讨论】:
-
你能补充一下条件是什么,如果不是那么复杂,你可以使用css
-
这有点奇怪,因为它应该更快地循环遍历项目并对要隐藏的项目执行 .hide() 而不是循环遍历,添加一个类,然后隐藏所有的与那个班级。所以你的实际代码搞砸了。您必须披露实际代码,以便我们提供准确的建议。此外,您需要在多个浏览器中使用 jsperf 之类的工具进行测试,以便在多个浏览器中得出准确的性能结论。
-
@jfriend00 问题可能源于调用
$数千次。 -
为什么需要
hide()所有.hidden元素?那不应该已经在你的样式表中定义了吗? -
我要做的是优化搜索数据结构,搜索并从结果中动态创建元素,而不是一直操纵巨大的 dom 树。这样,您一次只能拥有
maxSearchResults数量的 lis...
标签: javascript jquery optimization hide