поиск jquery против выбора контекста - PullRequest
47 голосов
/ 26 февраля 2010

Имея следующий фрагмент HTML

<div class="something">
    <p>Some text</p>
</div>
<div class="somethingElse">
    <p>some other text</p>
</div>

Я думаю, что следующие фрагменты jquery идентичны (будет иметь тот же результат):

$(".something").find("p").css("border", "1px solid red");

$("p", ".something").css("border", "1px solid red");

Мой вопрос: лучше ли один фрагмент, чем другой, и следует ли его использовать

Ответы [ 4 ]

63 голосов
/ 28 января 2012

Звонки не идентичны.

По словам Брэндона Аарона, который, очевидно, работал над jQuery, а также согласно живым тестам здесь , метод поиска всегда быстрее. Смотрите результаты на скриншоте ниже. Пожалуйста, прокомментируйте, если я что-то упустил.

С разницей в скорости 10% и более, в зависимости от браузера, определенно стоит поискать.

Дальнейшее объяснение на сайте Брэндона: здесь .

Results of performance comparison between jQuery context and jQuery find method

22 голосов
/ 26 февраля 2010

Оба вызова идентичны. Последний звонок переводится на первый. Если вы хотите пропустить шаг перевода, используйте первый.

10 голосов
/ 29 ноября 2013

Я могу вспомнить один случай использования, где использование формы context может быть предпочтительным - в случае, когда контекст содержится в переменной, которая может быть нулевой.

Например:

// Only affect matching items that are descendants of '#parent'
do_something( $( '#parent' ) );
// Affect all matching items
do_something();

function do_something( $parent_element ){
  $( '.child', $parent_element ).each( function(){ } );
}

Второй раз do_something() вызывается, если бы мы использовали $parent_element.find(), он бы потерпел неудачу, тогда как в этом примере, если $parent_element не определено или пусто, контекст равен нулю, таким образом: весь документ.

По общему признанию, это крайний случай, но он просто возник в чем-то, над чем я работал, поэтому подумал, что я положу его сюда для потомков.

7 голосов
/ 12 декабря 2013

Находи лучше, на 40%:

http://jsperf.com/jquery-find-vs-context-2/13

Обратите внимание на разницу:

$myDiv = $("myDiv")
myDiv = "#myDiv"

при передаче $myDiv, элемент jQuery в качестве контекста, он примерно на 10% медленнее, чем $ .find. при передаче #myDiv селектор jQuery в качестве контекста работает на 40% медленнее, чем $ .find.

$. Find> context.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...