2012-06-22 18 views
7

estaba leyendo aprendizaje jQuery 1.3 (Jonathan Karl Swedberg Chaffer y) y mientras mesa de selección, utilizaron .get() antes de llamar .sort(), y dijeron¿Métodos de Javascript que no pueden invocarse desde objetos jquery?

que necesitamos para transformar objetos jQuery en una matriz de nodos DOM. Aunque los objetos jQuery actúan como matrices en muchos aspectos, no tienen ninguno de los métodos de matriz nativa disponibles, como .sort().

Código:

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

así que traté de hacerlo sin utilizar .get(), pero la sorpresa funcionó incluso sin .get() con la última jQuery, pero no funcionó con 1,3

Así hecho algunos violines para que quede claro

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

Así que, obviamente anterior objetos jQuery no solía tener .sort() misma función que las matrices de JavaScript? Pero ahora tienen ..

Así que mi pregunta es ¿cuáles son las funciones del jQuery no objetos de soporte, sin embargo, por lo que se pueden tener en cuenta para convertir a las matrices de JavaScript, antes de su uso ??

+2

Y otra razón por la que no se hace uso de jQuery. –

+0

Para abordar el último punto: No, no es un objeto jQuery. Lo general es un objeto jQuery que contiene elementos DOM, por lo que 'a' y' b' (que son elementos individuales dentro del objeto) son elementos DOM. –

+1

No debe confiar en las características no documentadas de ninguna biblioteca; podrían cambiar en cualquier momento.En este caso específico, solo siga adelante y obtenga una verdadera matriz de elementos DOM antes de realizar operaciones de matriz. –

Respuesta

4

objetos jQuery actualmente soportan 3 métodos de arreglos:

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

También tienen slice, pero no es el mismo slice como matrices tienen:

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

jQuery tiene un método .sort, simplemente no está oficialmente documentado porque no sigue el formato habitual de los métodos jQuery.

Los únicos métodos que son compatibles son los que se enumeran en el api.

.sort se implementa como:

$.fn.sort = [].sort; 

Usted puede añadir sus propios métodos de arreglos adicionales si fuera necesario de la misma manera.

$.fn.reverse = [].reverse; 

Si .sort no está implementado en su versión de jQuery, implementarla uno mismo.

Cuestiones relacionadas