Domanda

sto porting una webapp dal prototipo alla jQuery in cui ho usato spesso funzione il prototipo di Down (). (Selezione del primo figlio di un dato elemento)

Gettando uno sguardo sul JQuery-api uno dei modi per farlo potrebbe essere:

prototipo: $ ( 'abc') verso il basso ();. jQuery: $ ( 'abc') bambini () (primo);..

Tuttavia, dal momento che questa prima recupera tutti i bambini e applica un filtro aferwards, dubito che sia efficiente per questo caso d'uso.

Che cosa è un modo migliore?

È stato utile?

Soluzione

È possibile estendere jQuery, e aggiungere una funzione down() come questo:

(function($) {
  $.fn.down = function() {
    return $(this[0] && this[0].children && this[0].children[0]);
  };
})(jQuery);

In questo modo non dovete cambiare nulla nel codice.

È possibile vedere questo jsFiddle esempio .
Inoltre è possibile visualizzare un comparisson performance in jsPerf .
Esso dimostra che questo è più veloce rispetto ai metodi presentati nelle altre risposte (che sono dal 40% al 70% più lento).

EDIT:
Una versione alternativa adattato dalla effettiva attuazione prototipo. Questo è ancora più veloce (25%)

(function($) {
  $.fn.down = function() {
    var el = this[0] && this[0].firstChild;
    while (el && el.nodeType != 1)
      el = el.nextSibling;
    return $(el);
  };
})(jQuery);

Altri suggerimenti

Ci sono un paio di modi si può fare questo.

Innanzitutto, questo restituisce una matrice contenente singolo elemento.

$('form').children().first(); 

Si noti inoltre questa è una versione più leggibile di $('form').children(":eq(0)");

In secondo luogo, questa ritorna solo l'elemento estratto dalla matrice

$('form').children()[0];

In alternativa, se si conosce il tipo di elemento vostro dopo (e non solo il primo figlio indipendentemente dal tipo di elemento) è possibile utilizzare:

$('form').find("input:first");

Infine, se non strettamente necessario l'elemento rispetto al suo genitore, si può solo accedere direttamente tramite un selettore CSS3:

$("input:first");

mi piacerebbe il sospetto che questa ultima opzione è la più effiecent se si può farla franca. Ma se qualcuno ha altro da dire su efficienza, mi piacerebbe sentirla.

provare:

$('abc').children(":eq(0)")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top