2012-06-22 12 views
7

czytałem Learning jQuery 1.3 (Jonathan chaffer i Karl Swedberg) i podczas sortowania tabeli, używali .get() przed wywołaniem .sort() i powiedziałMetody JavaScript, które nie mogą być wywołane z obiektów jquery?

musimy przekształcić jQuery obiektów w tablicy węzłów DOM. Mimo że obiekty jQuery działają pod wieloma względami jak tablice, nie mają one żadnych dostępnych metod macierzy, takich jak .sort().

Kod:

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

Więc starałem się to zrobić bez użycia .get(), ale niespodzianka pracował nawet bez .get() z najnowszej jQuery, ale nie działa z 1.3

tak wykonane niektóre skrzypce, aby je wyczyścić:

**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

więc oczywiście wcześniej obiekty jQuery nie używane mieć .sort() funkcję samo jak tablice javascript? Ale teraz mają ..

Więc moje pytanie brzmi, jakie są funkcje obiektów jQuery nie obsługuje jeszcze, więc możemy pamiętać o konwersji na tablice JavaScript, przed użyciem?

+2

I kolejny powód nie używam jQuery. –

+0

Aby zaadresować ostatni punkt: Nie, to nie jest obiekt jQuery. Całość jest obiektem jQuery, który zawiera elementy DOM, więc 'a' i' b' (będące pojedynczymi elementami wewnątrz obiektu) są elementami DOM. –

+1

Nie powinieneś polegać na nieudokumentowanych funkcjach dowolnej biblioteki - mogą one ulec zmianie w każdej chwili.W tym konkretnym przypadku, po prostu idź dalej i zdobądź prawdziwą tablicę elementów DOM, zanim wykonasz operacje tablicowe. –

Odpowiedz

4

jQuery obiekty obsługuje obecnie 3 metody tablicy:

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

Mają też slice, ale to nie to samo slice jako tablice mają:

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

jQuery ma metodę .sort, po prostu nie jest oficjalnie udokumentowana, ponieważ nie jest zgodna z typowym formatem metod jQuery.

Jednymi metodami, które są obsługiwane, są te wymienione w api.

.sort jest zaimplementowany jako:

$.fn.sort = [].sort; 

Możesz dodać własne dodatkowe metody tablic, ile potrzeba w ten sam sposób.

$.fn.reverse = [].reverse; 

Jeśli .sort nie jest zaimplementowany w wersji jQuery, wdrożyć go samodzielnie.

Powiązane problemy