2015-06-12 2 views
0

Некоторые источники говорят:

var objectA = jQuery('.someClass'); // returns new instance of jQuery object. 

Некоторые говорят:

var objectA = jQuery('.someClass'); // returns an array of elements with class='someClass'. 

Если выше оператор возвращает объект JQuery, то как Objecta ведет себя как массив? Благодарю.

+4

Объект JQuery является * массив типа * объект. См. Http://stackoverflow.com/search?q=%5Bjavascript%5D+array-like –

+1

Оба оператора являются истинными, если вы предполагаете, что они означают объект типа типа, а не массив элементов. –

+0

@KevinB Я совсем не согласен. Единственное, что я мог бы предположить, заявляя, что что-то является массивом, заключается в том, что вы можете вызвать на нем функции Array.prototype, которые вы не можете использовать для объекта jQuery. – dave

ответ

5

objectA ведет себя как массив в том смысле, что его можно повторить и получить доступ по индексу. Это коллекция элементов с .someClass. Таким образом, это objectAмассив типа

var objectA = jQuery('.someClass'); 

var first = objectA[0];//first element with someClass 

objectA.each(function(){ 
    //do something with each element that has someClass 
}); 

Однако objectA не является чистым JS массива. Таким образом, он не имеет доступа к методам Array.prototype. Для того, чтобы получить доступ к этим методам, вы должны будете использовать toArray() как

var realArray = objectA.toArray(); 
realArray.reverse();//now you can use Array.protype methods like reverse() 

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

$(realArray[0]) 
+3

Обратите внимание, что при использовании 'toArray()' каждый результирующий элемент в массиве является элементом DOM и больше не является объектом jQuery. – dave

+0

@dave, спасибо за подсказку. Обновлен мой ответ – AmmarCSE

+0

Если я не ошибаюсь, он возвращает новый экземпляр объекта jQuery, добавляя к нему элементы (.someclass): 'jQuery.fn = { this.elements = elements; }; ' В этом случае мы должны получить к ним доступ как - objectA.elements [i]. Но я не понимаю, почему мы можем получить доступ как objectA [i]. – Ramson

Смежные вопросы