2013-06-13 3 views
0

У меня есть этот код:улучшить производительность моего селектора JQuery - удалить использование jquery.find

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

$ строка является ссылкой JQuery к строке таблицы. Есть ли способ оптимизировать этот код? Я действительно не хочу использовать функцию поиска, если только это не нужно. Мне было интересно, могу ли я сделать что-то вроде:

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

но это не работает. Есть ли способ улучшить этот код? В моем коде это называется много раз и, кажется, вызывает проблемы в IE.

+0

Можем ли мы увидеть HTML, что это работает на? –

+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 s, так что последний всегда будет превосходить прежний

используя .find(), как правило, хорошо, когда дело доходит до производительности. В сложных селекторов, как

$("table td div") 

В div «s найдены, а затем filterended на основе своих родителей и родителей их родителей после этого. с помощью функции поиска вы можете заставить выделенную для оценки слева направо вместо

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

Последняя будет выполнена быстрее, если у вас есть более div´'s than table`-х

Смежные вопросы