jQuery:在这种情况下(.find)vs(.filter)更快[关闭]

Posted

技术标签:

【中文标题】jQuery:在这种情况下(.find)vs(.filter)更快[关闭]【英文标题】:jQuery : which is faster in this case (.find) vs (.filter) [closed] 【发布时间】:2013-06-09 19:53:23 【问题描述】:

我有一张大桌子,里面有很多行 (50-200) 和列 (30)。所以我总共有至少 1500 个细胞。我想知道以下哪些指令更快,为什么?

//assuming we have some predefined variable
var table = $('#myTable');
var allCells = table.find('td');

如果选定的单元格有一个类selected

selectedCells = table.find('td.selected');

selectedCells = allCells.filter('.selected');

或者考虑到您有 1500 个要循环的单元格,是否有更好的原生 javascript 方式(在性能和可读性方面)来查找选定的单元格?

【问题讨论】:

自己试试吧:jsperf.com. @FelixKling 我不知道怎么用,你能帮我做吗? 查看现有测试,例如jsperf.com/jquery-selector-vs-standard-selector. jsperf.com/find-v-filter jsperf.com/find-v-filter/2,其中包括第三种情况:var selectedCells = table.find('td').filter('.selected'); 【参考方案1】:

find() 这里会更快,因为您的filter() 方法无论如何都依赖于find()。从您的代码:

var allCells = table.find('td');

selectedCells = allCells.filter('.selected');

table.find('td.selected'); 仅提取具有selected 类的td 元素。

table.find('td').filter('.selected') 拉出所有 td 元素,然后仅过滤具有selected 类的元素。

【讨论】:

为什么.filter依赖.find @FelixKling 没有。过滤器依赖于一组预先选择的对象。在这种情况下,这些对象是使用find() 选择的。 “将匹配元素集减少为匹配选择器或通过函数测试的元素。” api.jquery.com/filter 好的,所以你的意思只是在这种情况下,OP 在.filter 之前执行.find (虽然这很容易被误解,我想我在“你的filter()”中错过了“你的”方法”)。我假设 OP 无论如何都会始终执行var allCells = table.find('td');,因此使用.filter 比使用.find 再次搜索单元格要好。但谁知道:)

以上是关于jQuery:在这种情况下(.find)vs(.filter)更快[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

jQuery & Django:在这种情况下如何正确使用 jquery

jquery/livequery 在这种特殊情况下不起作用

jQuery和Django:在这种情况下如何正确使用jquery

std::string::find 总是返回 string::npos 甚至

等价于纯 JS 中 jQuery 的 contents().find() 链式方法

Jquery Datatable 搜索框左对齐