2013-09-18 2 views
-6

У меня есть этот кодКакой самый быстрый? Ближайший() против ручного траверса в JQuery

<td> 
    <div class='DivA'> 
    <a href='#' class='LinkA'>Upload</a> 
    <a href='#' class='LinkB'>Upload</a> 
    <a href='#' class='LinkC'>Upload</a> 
    <a href='#' class='LinkD'>Upload</a> 
    <a href='#' class='LinkE'>Upload</a> 
    <a href='#' class='LinkF'>Upload</a> 
    <a href='#' class='LinkG'>Upload</a> 
    </div> 
    <div class='DivB'>Some Stuff</div> 
    </td> 

Что является наиболее эффективным способом доступа LinkG на щелчку LinkB. Я придумал эти лучшие решения (по-моему), но с трудным временем, которое является самым быстрым.

$('.LinkB').closest(".LinkG"); 

или

$('.LinkB').parent().find('.LinkG'); 
+2

Первый из них самый быстрый, потому что второй никогда не найдет то, что вам нужно. – dfsq

+3

http://www.jsperf.com - Для всех ваших «самых быстрых» потребностей js. –

+1

'.closest' не * буквально * означает« ближайший ». Это означает, что «первый родитель должен соответствовать». –

ответ

1

Они делают разные вещи.

.closest('.DivB') будет проходить дерево DOM до тех пор, пока не найдет элемент, соответствующий селектору (возможно, нет).

.parent().next() будет делать то, что будет выглядеть, и найти родителя, а затем своего следующего брата.

Что вы хотите, это .closest('td').find('.DivB') и не беспокойтесь о микро-оптимизации. Он не будет ломаться, когда DOM немного изменится и будет работать в рамках одной ячейки таблицы, которая, вероятно, вам нужна.

Редактировать: вопрос был сильно отредактирован, но .closest() все еще не делает то, что вы думаете. Теперь вы хотите $('.LinkB').siblings(".LinkG");

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