Я початківець jQuery і, переглядаючи деякі приклади коду, я знайшов:
$(document.body)
і $('body')
Чи є різниця між цими двома?
$(body)
не працює для .on('click'...
подій, тоді як $(document.body)
і $(document)
обидва працюють.
Я початківець jQuery і, переглядаючи деякі приклади коду, я знайшов:
$(document.body)
і $('body')
Чи є різниця між цими двома?
$(body)
не працює для .on('click'...
подій, тоді як $(document.body)
і $(document)
обидва працюють.
Відповіді:
Вони посилаються на той самий елемент, різниця полягає в тому, що, коли ви говорите, що document.body
ви передаєте елемент безпосередньо jQuery. Альтернативно, коли ви передаєте рядок 'body'
, двигун вибору jQuery повинен інтерпретувати рядок, щоб зрозуміти, до яких елементів (ив) він відноситься.
На практиці або вийде виконати роботу.
Якщо вас цікавить, у документації для функції jQuery є додаткова інформація .
Відповіді тут насправді не повністю правильні. Близько, але є крайовий корпус.
Різниця полягає в тому, що $ ('body') насправді вибирає елемент за назвою тегу, тоді як document.body посилається на безпосередній об’єкт у документі.
Це означає, що якщо ви (або негідний сценарій) перезаписуєте документ document.body елемент (сором!) $ ('Body') все одно буде працювати, але $ (document.body) не буде. Тож за визначенням вони не рівноцінні.
Я б ризикну здогадатися, що є й інші крайові випадки (наприклад, глобально ідентифіковані елементи в IE), які також спровокують те, що становить перезаписаний елемент тіла на об'єкті документа, і буде застосовано та сама ситуація.
Я знайшов досить велику різницю в термінах під час тестування у своєму браузері.
Я використовував такий сценарій:
ПОПЕРЕДЖЕННЯ: запустивши це, ваш веб-переглядач трохи заморозить, а може навіть зламати його.
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>
Я зробив 10 мільйонів взаємодій, і це були результати (Chrome 65):
селектор: 19591,97509765625ms
елемент: 4947,8759765625ms
Передача елемента безпосередньо в 4 рази швидше, ніж передача селектора.
$(document.body)
використовує глобальну посилання document
для отримання посилання на body
, тоді $('body')
як це селектор, в якому jQuery отримає посилання на <body>
елемент наdocument
.
Ніякої суттєвої різниці, яку я бачу, ні помітного підвищення продуктивності від одного до іншого.
$(document.body)
Вимірюється
Тут не повинно бути різниці, можливо, перший трохи ефективніший, але я думаю, що це банально (ви не повинні турбуватися про це, насправді).
За допомогою обох ви загортаєте <body>
тег у об’єкт jQuery
Вихідні дані обидва рівнозначні. Хоча другий вираз проходить через пошук зверху вниз від кореня DOM. Ви можете уникнути додаткових накладних витрат (як би це не було мізерно), якщо у вас вже є об'єкт document.body, щоб JQuery завернути. Див. Http://api.jquery.com/jQuery/ # Вибір контексту