В чем разница между селекторами jquery и селекторами js?

Простой вопрос для noob. Есть ли разница между этими переменными?

var object1 = document.getElementById('myElement');
var object2 = $('#myElement');

Кроме того, могу ли я запустить обычный js файл на object2? Например, если #myElement является <textarea>, я могу:

object2.value = "fill in with this text";

или, я должен сделать:

$(object2).val('fill in with this text');

или, есть ли еще лучший способ?

Ответы

Ответ 1

var object1 = document.getElementById('myElement');

Вы получаете объект элемента DOM из этого вызова. Таким образом, вы используете свойство value, чтобы присвоить ему значение.

object1.value = "text";

var object2 = $('#myElement');

Вы получаете объект jQuery из этого вызова. Внутри объекта jQuery есть объект DOM. Подумайте о объекте jQuery как обложке для объекта DOM. Диаграмматически это выглядит примерно так (упрощенно):

jQuery ------------------+
|                        |
| Array ---------------+ |
| |                    | |
| | HTMLElement------+ | |
| | |                | | |
| | | DOM properties | | |
| | | DOM element    | | |
| | |     methods    | | |
| | |                | | |
| | +----------------+ | |
| | there may be zero, | |
| | one or more such   | |
| | objects inside     | |
| +--------------------+ |
| jQuery properties      |
| jQuery methods         |
|                        |
+------------------------+

Так как object2 является объектом jQuery, вы используете функцию val(), чтобы дать ему значение. Вы не можете использовать свойство value, потому что оно не совпадает с объектом DOM.

object2.val("text");

Как и другие ответы, вы можете получить доступ к базовому объекту DOM с помощью разыменования массива (object2[0]) или функции get(), а затем присвоить ему значение с помощью value.

Ответ 2

Первый элемент DOM, второй - объект jQuery со ссылкой на тот же элемент DOM.

Это не сработает: object2.value = "fill in with this text";, поскольку объект jQuery не имеет свойства .value, но это будет:

object1.value = "fill in with this text";

Чтобы получить необработанный элемент DOM из $('#myElement'), используйте [0] или .get(0) следующим образом:

$('#myElement')[0].value = "fill in with this text";

Ответ 3

object2 теперь является объектом jQuery, поэтому его нельзя рассматривать как стандартный элемент. Однако вы можете получить его, указав object2[0], который дает вам первый элемент в объекте jQuery.

Итак, вы можете использовать object2[0].value = "fill in with this text"; или просто использовать jQuery .val(). Но также обратите внимание, что вам не нужно делать

$(object2).val('fill in with this text');

поскольку этого также будет достаточно:

object2.val('fill in with this text');

поскольку object2 уже является объектом jQuery.


Наконец, примечание: jQuery(object1) (где object1 уже является элементом DOM) предоставит вам объект jQuery так же, как если бы вы $('myElement'), но селектор jQuery в некоторых случаях может быть быстрее или оптимизирован над селектором документов, который является родным для браузера. Это не всегда будет быстрее, но в некоторых случаях это может быть.

.getElementById (как указано ниже) должен быть эквивалентно быстрым при выборе, но тогда есть накладные расходы на его наличие в объекте jQuery, поэтому он будет по своей природе медленнее, чем селектор по умолчанию. Просто зависит от того, что вы пытаетесь выполнить, natch.

Ответ 4

Селектор jQuery $('#myElement') возвращает объект jQuery.

Однако вы можете получить элемент DOM из объекта jQuery, выполнив $('#myElement')[0].

Итак, вы можете сделать $(object2).val('fill in with this text') или $(object2)[0].value = 'fill in with this text'