Я надирався навколо вихідного коду веб-сайту, коли натрапив на такий код:
$($("#newForm_step1")).hide("slide", { direction: "left" }, 0);
і це:
$($($(".breadcrumbs")[0]).children().last()).html("...");
Я ніколи не бачив $
(jQuery
) функція, що використовується таким чином, і мені було цікаво, чи не може бути "будь-якої практичної причини зробити щось подібне?" Наскільки мені відомо, загортаючи об’єкт jQuery із закликом до $
просто повертає об'єкт jQuery для того ж селектора, а методи на jQuery об'єкти повертаються this
, тож я не бачу, для чого потрібні будуть вкладені дзвінки $
.
Відповіді:
1 для відповіді № 1Ні, для цього немає підстав.
У першому прикладі $($(...))
є зайвим. Немає абсолютно ніякого ефекту в негайному загортанні об’єкта jQuery в інший об’єкт jQuery.
Рядок має бути прочитаний
$("#newForm_step1").hide("slide", { direction: "left" }, 0);
У другому прикладі $(...)[0]
повертає необроблений елемент DOM, тому він знову загортається перед тим, як мати jQuery .children().last()
посилався на це. Результатом цього є вже об’єкт jQuery, тому не потрібно повторно завертати його, а "розгортання" можна було уникнути, зателефонувавши .first()
замість [0]
.
Рядок має бути прочитаний
$(".breadcrumbs").first().children().last().html("...");
0 для відповіді № 2
Немає необхідності обертати jQuery об'єкт jQuery. Це призведе до того ж, але перекодування та надмірність.
Але коли у вас є DOM Object, вам потрібно обернути jQuery, щоб він був об’єктом jQuery.
Візьмемо ваш приклад:
$(".breadcrumbs")[0];//[0] converts to JavaScript Object
Тепер, якщо ви хочете знову працювати з jQuery, ви можете обернутись jQuery:
$($(".breadcrumbs")[0]);//is now a jQuery Object
Але цей приклад непотрібний, тому що ви можете зробити так само:
$(".breadcrumbs:eq(0)");//selects first .breadcrumbs element
Однак якщо у вас є якийсь об'єкт DOM, а не jQuery, тоді вам потрібна оболонка jQuery для роботи з методами jQuery.
Ви повинні пам’ятати про це:
Для об єкта JavaScript потрібні методи JavaScript:
javascriptObject.javascriptMethods
Ex-
$(".breadcrumbs")[0].addEventListener();//javascript addEventListener method
jQuery Object потребує методів jQuery, щоб бути ланцюжком:
jQueryObject.jQueryMethods
Ex-
$(".breadcrumbs").on();//jQuery on method