Имея следующий 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 > контекст.