【发布时间】:2014-10-21 03:06:28
【问题描述】:
我正在为 jQuery 使用 DataTables 插件。在 DataTable 中,我大约有 16 个 tr 行,每行有 4 个 td 列。 DataTables 插件提供了一个 API 扩展,允许在表格的所有单元格或指定列的所有单元格中搜索字符串。
搜索扩展返回找到匹配项的行索引数组。例如,[3, 7, 10, 11]。搜索扩展最初支持完全匹配搜索,我必须从以下位置进行修改:
if (val == sSearch)
到:
if (val.indexOf(sSearch) > 0)
我的自定义肯定是我遇到性能问题的原因,但这是必要的,因为单元格的内容是动态更新的,因此无法执行精确匹配搜索。
干草堆示例:
<input id="_HeatOfRejection" class="form-control text-right text-box single-line" type="text" name="HeatOfRejection" measureid="HeatLoad" value="5000.0" uomid="MBH">
一个示例针:
' measureid=\"HeatLoad\" '
执行针头搜索所需的平均时间约为 17.5 毫秒,由于内循环包含约 16 个不同的针头,外循环导致内循环的额外循环,因此处理时间太明显了。这并不可怕,但可能需要 2-3 秒。请注意,这不是关键功能。
我想知道是否有比使用 indexOf() 执行此搜索更快的方法。使用 jQuery 选择器可能会更快,但 id 对搜索来说是未知/不重要的。多个控件可以包含针,所以我必须搜索整个列。
【问题讨论】:
-
搜索元素
attribute是否匹配$("[measureid=HeatLoad]")? -
据我所知 indexOf 是浏览器 javascript 引擎的本地实现,javascript 函数不能比这更快。性能问题很可能是由脚本的其他部分引起的,我们没有太多可见性。如果您可以包含一个简单的jsfiddle.net 来显示您的问题会更好,以便其他人可以摆弄并尝试帮助您
标签: javascript jquery search