#jquery #children
#jquery #дочерние элементы
Вопрос:
Пожалуйста, объясните значение [0] в этом коде:
$(function (){
var $cont = $('#cont');
var $el = $cont.children(':first'), el = $el[0];
});
Я попробовал какое-то «оповещение», чтобы найти текст, но я не совсем понимаю, почему мы уточняем индекс, в то время как мы уже знаем, что указываем на «первых» дочерних элементов div … ?
Комментарии:
1. Разве разница не в том, что .children возвращает объект jQuery, содержащий первый элемент (со всеми функциональными возможностями jQuery на нем), а [0] возвращает сам HTML-элемент?
Ответ №1:
В приведенном выше примере $el
это объект jQuery, содержащий один элемент, который обеспечивается :first
селектором. С другой стороны, el
содержит базовый элемент DOM первого (и единственного) элемента в $el
объекте jQuery.
Вы можете получить доступ к собственным свойствам el
переменной, таким .innerHTML
как. Вы можете использовать все поддерживаемые jQuery операции над $el
, например $el.html()
.
Комментарии:
1. Спасибо! итак, я имею в виду, какова цель нацеливания на элемент внутри объекта jquery? для какого примера нам нужно настроить таргетинг на элемент javascript? jquery обрабатывает то же самое, что и «обычный» js, не так ли?
2. jQuery реализует свои собственные функции, полностью оборачивая элементы DOM, вы не можете использовать собственные свойства для объектов jQuery, как в моем примере с
innerHTML/html()
выше. Вам может понадобиться исходный элемент, если вы передаете их в библиотеки javascript, не поддерживающие jQuery, для устранения ошибки в jQuery до выпуска исправления, для использования функциональности, специфичной для браузера, или для чего-либо еще. Всегда приятно иметь возможность в библиотеках развернуть и получить исходный объект.
Ответ №2:
Объект jQuery обычно содержит коллекцию / массив DOM-узлов. Например, если вы выполняете итерацию по объекту jQuery, такому как —
$('div').each(function() {
//In this context, this refers to the DOM node
//and $(this) refers to a jQuery object for that particular DOM node
//therefore $(this)[0] == this
this.innerHTML = 'foo';
$(this).html('foo');
$(this)[0].innerHTML = 'foo';
});
Вы также можете использовать .get() для аналогичного эффекта.
//retrieves an array of native DOM nodes using jQuery
var allDivNodes = $('div').get();
//retrieves the first node retrieved by the selector
var firstDiv = $('div').get(0);
//this is the same as get(0), however, using an array accessor can throw an exception
var firstDiv = $('div')[0];
Комментарии:
1. Спасибо! итак, я имею в виду, какова цель нацеливания на элемент внутри объекта jquery? для какого примера нам нужно настроить таргетинг на элемент javascript? jquery обрабатывает то же самое, что и «обычный» js, не так ли?
2. По большей части, вам не нужно. Но браузеры могут иметь немного разные реализации DOM, и свойства / методы могут отличаться. Иногда желательно использовать сам собственный узел.
Ответ №3:
Все запросы jQuery возвращают список всех объектов, которые совпали. :first
не гарантирует ни одного результата, таким образом, [0] захватывает один элемент.
Комментарии:
1. Спасибо! что ж, если мы нацелимся на идентификатор div и добавим к нему «first», мы почти уверены, что он будет соответствовать только «одному» элементу, первому, нет?
2. @Paul, зависит. Простой запрос, который использует
:first
, но возвращает более одного элемента, являетсяul li:first
. Этот запрос возвращает первыйli
тег каждогоul
тега, но на странице может быть более одногоul
тега (таким образом, возвращая несколько результатов). Более неясной версией этого запроса было бы$("ul").find("li:first")
. То же самое, но гораздо сложнее увидеть, что есть несколько результатов.
Ответ №4:
var $el = $cont.children(':first')
Если селектор совпадает, это дает вам массивоподобный объект с соответствующим элементом. Вам нужен соответствующий элемент — вот почему вы используете [0]
— для получения первого (и единственного) элемента возвращаемого «массива».
Это в основном похоже на разницу между: [element]
и element
(Где, [element][0] = element
)
Ответ №5:
[0] — это то же самое, что использовать get(0) для получения элемента DOM, а не элемента jQuery.