Let's say I have $('mySelector:first');
and $('mySelector').first();
. Which way is the most efficient? I looked in the source, but still couldn't figure it out.
It looks like in the first case jQuery goes through every item until gets the first one:
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;
...
}
}
In second case jQuery slices the collection, but I am not sure how efficient it is:
function first() {
return this.eq( 0 );
};
function eq( i ) {
return i === -1 ?
this.slice( i ) :
this.slice( i, +i + 1 );
};
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…