Чтобы понять, как eq()
работает, я думаю, что это помогает понять, как $()
работает в jQuery. Когда вы указываете
$([selector],[context])
//which is the same as
$([context]).find([selector])
Возвращается объект jQuery (иногда называемый упакованным набором ), который, помимо других свойств, имеет свойство, начинающееся с 0
и увеличивается на 1 для каждого элемента, соответствующего селектору. Также устанавливается свойство length
, поэтому совпадающие элементы объекта jQuery можно перебирать как массив (используя цикл for или такие команды, как each([callback])
).
Давайте теперь посмотрим на источник для eq()
eq: function( i ) {
return this.slice( i, +i + 1 );
},
мы видим, что eq()
достигается с помощью команды slice()
объекта jQuery, поэтому давайте также посмотрим на это
slice: function() {
return this.pushStack( Array.prototype.slice.apply( this, arguments ),
"slice", Array.prototype.slice.call(arguments).join(",") );
},
, а также нужно посмотреть на pushStack()
, команда, которая довольно часто используется внутри
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
var ret = jQuery( elems );
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
ret.context = this.context;
if ( name === "find" )
ret.selector = this.selector + (this.selector ? " " : "") + selector;
else if ( name )
ret.selector = this.selector + "." + name + "(" + selector + ")";
// Return the newly-formed element set
return ret;
},
мы можем видеть, что pushStack
принимает массив и возвращает новый объект jQuery. Элементы, которые формируют совпадающие элементы нового объекта jQuery, получаются путем вызова Function.apply
функции JavaScript Array slice
и передачи arguments
функции слайса jQuery в качестве argsArray
.
Команда get()
, с другой стороны, более проста. Давайте посмотрим на источник
// Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
get: function( num ) {
return num === undefined ?
// Return a 'clean' array
Array.prototype.slice.call( this ) :
// Return just the object
this[ num ];
}
вызывается без аргумента для параметра num
, объект jQuery преобразуется в массив, используя Function.call
в функции JavaScript Array slice
. Если определено num
, то возвращается значение, содержащееся в соответствующем свойстве объекта jQuery, во многом аналогично следующему
$([selector]).get(0)
//is the same as
$([selector])[0]