Допустим, у меня есть $('mySelector:first');
и $('mySelector').first();
.Какой способ наиболее эффективен?Я посмотрел на источник, но все еще не мог понять.
Похоже, что в первом случае jQuery просматривает каждый элемент, пока не получит первый:
CHILD: function( elem, match ) {
var type = match[1],
node = elem;
switch ( type ) {
...
case "first":
while ( (node = node.previousSibling) ) {
if ( node.nodeType === 1 ) {
return false;
}
}
if ( type === "first" ) {
return true;
}
node = elem;
...
}
}
Во второмcase jQuery разрезает коллекцию, но я не уверен, насколько она эффективна:
function first() {
return this.eq( 0 );
};
function eq( i ) {
return i === -1 ?
this.slice( i ) :
this.slice( i, +i + 1 );
};