Поиск jQuery и контекст

Имея следующий 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");

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

Ответ 1

Вызовы не идентичны.

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

При разнице в скорости на 10% или выше, в зависимости от браузера, определенно стоит использовать find.

Дальнейшее объяснение на сайте Brandon здесь.

Results of performance comparison between jQuery context and jQuery find method

Ответ 2

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

Ответ 3

Я могу вспомнить один случай использования, когда использование формы 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 - undefined или пустой, контекст имеет значение null, таким образом: весь документ.

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

Ответ 4

Найти лучше, на 40%:

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

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

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

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

$. find > контекст.