2012-06-22 21 views
7

ich Learning jQuery 1.3 (Jonathan Chaffer und Karl Swedberg) zu lesen und während Sortiertisch, verwendete sie .get() vor .sort() Aufruf und sagteJavascript-Methoden, die nicht von jquery-Objekten aufgerufen werden können?

wir brauchen jQuery-Objekte in einem Array von DOM-Knoten zu transformieren. Obwohl jQuery-Objekte in vielerlei Hinsicht wie Arrays funktionieren, verfügen sie nicht über die verfügbaren systemeigenen Array-Methoden wie .sort().

Code:

$("#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); }); 
});​ 

Also habe ich versucht, es zu tun, ohne .get() zu verwenden, aber verwundert es funktionierte auch ohne .get() mit neuesten jQuery, aber hat nicht funktioniert mit 1.3

So machte einige Geigen klar

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

zu machen

Working with .get() jquery 1.2.6

Working without .get() jquery 1.7.2

Working with .get() jquery 1.7.2

So offensichtlich früher jQuery Objekte nicht genutzt .sort() gleiche Funktion wie Javascript-Arrays haben? Aber jetzt haben sie ..

Also meine Frage ist, was sind die Funktionen, die die jQuery-Objekte noch nicht unterstützen, so können wir daran denken, vor der Verwendung in Javascript-Arrays zu konvertieren ??

+2

Und ein weiterer Grund, warum ich verwenden jQuery nicht. –

+0

Um den letzten Punkt zu adressieren: Nein, es ist kein jQuery-Objekt. Das Ganze ist ein jQuery-Objekt, das DOM-Elemente enthält, also sind 'a' und' b' (als einzelne Elemente innerhalb des Objekts) DOM-Elemente. –

+1

Sie sollten sich nicht auf undokumentierte Funktionen einer Bibliothek verlassen - sie könnten sich jederzeit ändern.Gehen Sie in diesem speziellen Fall einfach vor und führen Sie ein Array von DOM-Elementen aus, bevor Sie Array-Operationen ausführen. –

Antwort

4

jQuery Objekte unterstützen derzeit drei Array-Methoden:

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"] 

Sie auch slice haben, aber es ist nicht das gleiche slice als Arrays haben:

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

jQuery hat eine .sort Methode, es ist nur nicht offiziell dokumentiert, da es nicht das übliche Format von jQuery-Methoden folgt. Die einzigen unterstützten Methoden sind die in der api aufgelisteten Methoden.

.sort implementiert als:

$.fn.sort = [].sort; 

Sie können Ihre eigene zusätzliche Array Methoden hinzufügen, wie in der gleichen Art und Weise benötigt.

$.fn.reverse = [].reverse; 

Wenn .sort in Ihrer Version von jQuery nicht implementiert, implementieren it yourself.

Verwandte Themen