Я начинаю JQuery и просматриваю некоторые примеры в некоторых найденных кодах.
$(document.body)
и $('body')
Может ли кто-нибудь сказать мне, есть ли разница между этими двумя?
Я начинаю JQuery и просматриваю некоторые примеры в некоторых найденных кодах.
$(document.body)
и $('body')
Может ли кто-нибудь сказать мне, есть ли разница между этими двумя?
Они относятся к одному и тому же элементу, разница в том, что когда вы говорите document.body
, вы передаете элемент непосредственно в jQuery. Кроме того, когда вы передаете строку 'body'
, механизм селектора jQuery должен интерпретировать строку, чтобы выяснить, какие элементы (ей) она ссылается.
На практике либо выполнит свою работу.
Если вам интересно, в документации для функции jQuery больше информации.
Ответы здесь на самом деле не совсем корректны. Закрыть, но есть краевой кейс.
Разница в том, что $('body') фактически выбирает элемент по имени тега, тогда как document.body ссылается на прямой объект на документе.
Это означает, что если вы (или изгоев script) перезаписываете элемент document.body(позор!) $('body') все равно будет работать, но $(document.body) не будет. Поэтому по определению они не эквивалентны.
Я бы рискнул догадаться, что есть другие случаи ребер (например, глобально id'ed элементы в IE), которые также будут запускать то, что составляет перезаписанный элемент тела в объекте документа, и такая же ситуация будет применяться.
$(document.body)
использует глобальную ссылку document
, чтобы получить ссылку на body
, тогда как $('body')
является селектором, в котором jQuery получит ссылку на элемент <body>
на document
.
Никакой существенной разницы, которую я могу видеть, а не заметного прироста производительности от одного к другому.
Я обнаружил довольно большую разницу во времени при тестировании в своем браузере.
Я использовал следующий скрипт:
ВНИМАНИЕ: запуск этого кода немного заморозит ваш браузер, может даже вызвать сбой.
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>
Не должно быть никакой разницы, может быть, сначала немного более результативна, но я думаю, что это тривиально (вы не должны волноваться об этом, действительно).
При переносе тега <body>
в объект jQuery
Выходные оба эквивалентны. Хотя второе выражение просматривается сверху вниз с корня DOM. Возможно, вам захочется избежать дополнительных накладных расходов (как бы это ни было незначительно), если у вас уже есть объект document.body для переноса JQuery. См. http://api.jquery.com/jQuery/# Контекст селектора