зачем ставить [0] для результата children (': first')? - PullRequest
4 голосов
/ 27 апреля 2011

Пожалуйста, объясните [0] в этом коде:

$(function (){      
    var $cont = $('#cont');     
    var $el = $cont.children(':first'), el = $el[0];    
}); 

Я попытался «предупредить», чтобы найти текст, но я не совсем понимаю, почему мы уточняем индекс, хотя мы уже знаем, что указываем на «первых» дочерних элементов div ...?

Ответы [ 5 ]

6 голосов
/ 27 апреля 2011

В приведенном выше примере $el - это объект jQuery, содержащий один элемент, который обеспечивается селектором :first. С другой стороны, el содержит базовый элемент DOM первого (и единственного) элемента в $el jQuery объекте.

Вы можете получить доступ к собственным свойствам переменной el, например .innerHTML. Вы можете использовать все поддерживаемые jQuery операции на $el, например $el.html().

2 голосов
/ 27 апреля 2011

Объект 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 голос
/ 27 апреля 2011

[0] - это то же самое, что и использование get (0) для получения элемента DOM, а не элемента jQuery.

1 голос
/ 27 апреля 2011
var $el = $cont.children(':first')

Если селектор совпадает, это дает вам массивоподобный объект с соответствующим элементом . Вам нужен соответствующий элемент - поэтому вы используете [0] - чтобы получить первый (и только) элемент возвращенного массива.

Это в основном похоже на разницу между [element] и element (где [element][0] = element)

1 голос
/ 27 апреля 2011

Все запросы jQuery возвращают список всех соответствующих объектов. :first не гарантирует одного результата, поэтому [0] захватывает один элемент.

...