Все Объекты jQuery Уникальны
Важная подробность относительно поведения "обертывания" - то, что каждый jQuery-обернутый объект является уникальным. Это - истинно даже если объект создавался с тем же самым селектором или содержит ссылки на те же самые элементы DOM.
Создание двух объектов jQuery для того же самого элемента:
var logo1 = $( "#logo" );
var logo2 = $( "#logo" );
Хотя logo1
и logo2
создаются одикановым образом (и обертывают тот же самый элемент DOM), они не являются тем же самым объектом. Например:
Сравнение объектов jQuery:
Однако, оба объекта содержат тот же самый элемент DOM. Метод .get()
полезен для тестирования, если у двух объектов jQuery тот же самый элемент DOM.
Сравнение элементов DOM:
Пример
var logo1Elem = logo1.get( 0 );
var logo2 = $( "#logo" );
var logo2Elem = logo2.get( 0 );
alert( logo1Elem === logo2Elem ); // выводит "true"
Попробуйте Сами »
Многие разработчики снабжают префиксом $
имена переменных, которые содержат объекты jQuery, чтобы проще их отличать. Нет ничего волшебного в этой практике – это только помогает некоторым людям следить за тем, что содержат различные переменные. Предыдущий пример мог быть переписан, чтобы следовать этому соглашению:
Сравнение элементов DOM (с более читабельными именами переменных):
var $logo1 = $( "#logo" );
var logo1 = $logo1.get( 0 );
var $logo2 = $( "#logo" );
var logo2 = $logo2.get( 0 );
alert( logo1 === logo2 ); // выводит "true"
Этот код функционирует аналогично примеру выше, но он является немного больше четким для чтения.
Независимо от используемого соглашения о присвоении имен очень важно делать различие между объектом jQuery и собственными элементами DOM. Собственные методы DOM и свойства не присутствуют в объекте jQuery, и наоборот. Сообщения об ошибках, такие как "event.target.closest is not a function" и "TypeError: Object [object Object] has no method 'setAttribute'" указывают на наличие этой распространенной ошибки.