Подтвердить что ты не робот

Разница между $(document.body) и $('body') JQuery

Я начинаю JQuery и просматриваю некоторые примеры в некоторых найденных кодах.

$(document.body) и $('body')

Может ли кто-нибудь сказать мне, есть ли разница между этими двумя?

4b9b3361

Ответ 1

Они относятся к одному и тому же элементу, разница в том, что когда вы говорите document.body, вы передаете элемент непосредственно в jQuery. Кроме того, когда вы передаете строку 'body', механизм селектора jQuery должен интерпретировать строку, чтобы выяснить, какие элементы (ей) она ссылается.

На практике либо выполнит свою работу.

Если вам интересно, в документации для функции jQuery больше информации.

Ответ 2

Ответы здесь на самом деле не совсем корректны. Закрыть, но есть краевой кейс.

Разница в том, что $('body') фактически выбирает элемент по имени тега, тогда как document.body ссылается на прямой объект на документе.

Это означает, что если вы (или изгоев script) перезаписываете элемент document.body(позор!) $('body') все равно будет работать, но $(document.body) не будет. Поэтому по определению они не эквивалентны.

Я бы рискнул догадаться, что есть другие случаи ребер (например, глобально id'ed элементы в IE), которые также будут запускать то, что составляет перезаписанный элемент тела в объекте документа, и такая же ситуация будет применяться.

Ответ 3

$(document.body) использует глобальную ссылку document, чтобы получить ссылку на body, тогда как $('body') является селектором, в котором jQuery получит ссылку на элемент <body> на document.

Никакой существенной разницы, которую я могу видеть, а не заметного прироста производительности от одного к другому.

Ответ 4

Я обнаружил довольно большую разницу во времени при тестировании в своем браузере.

Я использовал следующий скрипт:

ВНИМАНИЕ: запуск этого кода немного заморозит ваш браузер, может даже вызвать сбой.

var n = 10000000, i;
i = n;
console.time('selector');
while (i --> 0){
    $("body");
}

console.timeEnd('selector');

i = n;
console.time('element');
while (i --> 0){
    $(document.body);
}

console.timeEnd('element');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Ответ 5

Не должно быть никакой разницы, может быть, сначала немного более результативна, но я думаю, что это тривиально (вы не должны волноваться об этом, действительно).

При переносе тега <body> в объект jQuery

Ответ 6

Выходные оба эквивалентны. Хотя второе выражение просматривается сверху вниз с корня DOM. Возможно, вам захочется избежать дополнительных накладных расходов (как бы это ни было незначительно), если у вас уже есть объект document.body для переноса JQuery. См. http://api.jquery.com/jQuery/# Контекст селектора