Я початківець 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/ # Вибір контексту