提高我的jQuery选择器的性能 - 删除jquery.find的使用

时间:2013-06-13 10:57:35

标签: javascript jquery

我有这段代码:

$item = $row.find('td[data-id="' + id + '"]');

$ row是对表行的jquery引用。有什么办法可以优化这段代码吗?除非必须,否则我真的不想使用find函数。我想知道我是否可以做类似的事情:

$item = $($row + 'td[data-id="' + id + '"]');

但这似乎不起作用。有什么办法可以改进这段代码吗?在我的代码中,这被多次调用,似乎在IE中引起了问题。

3 个答案:

答案 0 :(得分:4)

未使用find

$item = $('td[data-id="' + id + '"]',$row);

虽然.find()比我建议的更快

enter image description here

答案 1 :(得分:1)

这是尝试和优化的一小段代码。你说它被称为很多次。您应该查看一次调用以提取所需的所有单元格,然后对生成的集合进行操作。一些HTML将有助于确定这是否真的可行。

答案 2 :(得分:0)

在您的特定情况下,您已经有了第一个选择,并希望在该结果中进行搜索

你可以做到

//passing the $row as the context for the selection
$("'td[data-id="' + id + '"]'",row); 

$row.find('td[data-id="' + id + '"]')

然而前者在通过几个if之后实际上会调用后者,所以后者总是会胜过前者

使用.find()在性能方面通常是一件好事。在像

这样的复合选择器中
$("table td div")

找到div,然后根据父母及其父母的父母进行过滤。使用find你可以强制选择从左到右进行评估

$("table").find("td").find("div")

假设您有更多div´'s than表格的

,后者将执行得更快