2012-06-22 10 views
7

Stavo leggendo Learning jQuery 1.3 (Jonathan Chaffer e Karl Swedberg) e mentre l'ordinamento tavolo, hanno usato .get() prima di chiamare .sort(), e ha dettometodi Javascript che non possono essere chiamati da oggetti jQuery?

dobbiamo trasformare jQuery oggetti in array di nodi DOM. Anche se gli oggetti jQuery si comportano come matrici per molti aspetti, non hanno nessuno dei metodi di matrice nativi disponibili, come .sort().

Codice:

$("#sort").click(function() { 
     var posts = $("#posts_div .post"); 
     posts.sort(function(a, b) { 
      return ($(a).text()) > ($(b).text()); 
     });  
     $.each(posts, function(index, post) { $("#posts_div").append(post); }); 
});​ 

Così ho provato a farlo senza usare .get(), ma a sorpresa ha funzionato anche senza .get() con l'ultima jQuery, ma non ha funzionato con 1.3

Così fatta alcuni violini per chiarire

**Not working without .get() jquery 1.2.6 **

Working with .get() jquery 1.2.6

Working without .get() jquery 1.7.2

Working with .get() jquery 1.7.2

Così, ovviamente, in precedenza gli oggetti jQuery non hanno usato per avere .sort() funzione stessa di array JavaScript? Ma ora hanno ..

Quindi la mia domanda è quali sono le funzioni che gli oggetti jQuery non supportano ancora, quindi possiamo ricordare di convertire in array Javascript, prima dell'uso ??

+2

E un altro motivo per non uso jQuery. –

+0

Per indirizzare l'ultimo punto: No, non è un oggetto jQuery. La cosa generale è un oggetto jQuery che contiene elementi DOM, quindi 'a' e' b' (essendo singoli elementi all'interno dell'oggetto) sono elementi DOM. –

+1

Non si deve fare affidamento su funzionalità non documentate di alcuna libreria: potrebbero cambiare in qualsiasi momento.In questo caso specifico, basta andare avanti e ottenere una vera matrice di elementi DOM prima di eseguire le operazioni dell'array. –

risposta

4

oggetti jQuery attualmente supportano 3 metodi di matrice:

var methods = 'pop push reverse shift sort splice unshift concat join slice toString indexOf lastIndexOf filter forEach every map some reduce reduceRight'.split(' ') 
var implemented = $.grep(methods, function(m) { 
    return $.prototype[m] == Array.prototype[m]; 
}); 
console.log(implemented); // => ["push", "sort", "splice"] 

Hanno anche slice, ma non è la stessa slice come array hanno:

$.prototype.slice === Array.prototype.slice // => false 
1

jQuery ha un metodo .sort, non è ufficialmente documentato perché non segue il solito formato dei metodi jQuery.

Gli unici metodi supportati sono quelli elencati nello api.

.sort è implementato come:

$.fn.sort = [].sort; 

È possibile aggiungere i propri metodi di array aggiuntivi, se necessario allo stesso modo.

$.fn.reverse = [].reverse; 

Se .sort non viene realizzato nella versione di jQuery, attuare da soli.

Problemi correlati