2013-06-13 35 views
0

我有这样的代码:提高我的jQuery选择的性能 - 删除使用jquery.find

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

$行是一个jQuery参照表行。有什么办法可以优化这段代码吗?除非必须,否则我并不想使用查找功能。我想知道我是否可以这样做:

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

但这似乎并不奏效。有什么方法可以改进此代码?在我的代码中,这被称为很多次,似乎在IE中造成问题。

+0

我们可以看到,这是作用在HTML? – 2013-06-13 10:59:28

+0

我会认为使用'.find'会比以某种方式组合选择器更好。如果您只使用一个选择器,则它将搜索整个文档,同时使用'.find',将搜索空间限制为仅一行。 –

+4

为什么你认为'.find()'是一个问题?你是什​​么意思“似乎是造成问题”? – nnnnnn

回答

4

不使用找到明确

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

虽然.find()更快然后那我建议

enter image description here

+5

这不会导致幕后的'.find()'? – nnnnnn

+0

@nnnnnn是的,这是为什么查找速度更快的一部分原因 –

1

这是一个很小的一段代码尝试和优化。你说它被称为很多次。你应该看看做出一个调用来提取所有你想要的单元格,然后对结果集合进行操作。有些HTML会帮助我们看看这是否真的可行。

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的被发现,然后根据他们的父母,之后他们的父母的父母filterended。使用发现你可以强制selction评估由左到右,而不是

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

后者将执行速度更快假设你有更多的div´'s than table`的