2012-06-22 10 views
7

私は学習jQueryの1.3(ジョナサン・チェーファーとカールSwedberg)を読んでいたし、テーブルを並べ替えながら、彼らは.sort()を呼び出す前に.get()を使用して、我々はDOMノードの配列にjQueryのオブジェクトを変換する必要がjqueryオブジェクトから呼び出すことができないJavascriptメソッド?

を言いました。 jQueryオブジェクトは多くの点で配列のように動作しますが、.sort()などの使用可能なネイティブ配列メソッドはありません。

コード:

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

は、だから私は.get()を使用せずにそれを実行しようとしましたが、それは、最新のjQueryを使っても、.get()ずに働いた驚きが、そう作られた1.3

では動作しませんでしたいくつかの謎を解き放つことができます。

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

だから、明らかに以前のjQueryオブジェクトは、JavaScriptの配列と同じ.sort()の機能を持つように使用されていないのですか?しかし今では...

私の質問は、jQueryオブジェクトがまだサポートしていない機能なので、使用する前にJavascript配列に変換することを覚えておくことができますか?

+2

はまた、もう一つの理由は、私はjQueryのを使用しないでください。 –

+0

最後の点に対処する:いいえ、jQueryオブジェクトではありません。全体的なことは、DOM要素を含むjQueryオブジェクトです。したがって、 'a'と' b'(オブジェクト内の個々の要素)はDOM要素です。 –

+1

ライブラリの文書化されていない機能に頼るべきではありません。この具体的なケースでは、配列操作を実行する前に真のDOM要素の配列を取得してください。 –

答えて

4

jQueryのオブジェクトは、現在、3つのアレイ方式をサポート:

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

彼らはまたsliceを持っているが、それは配列と同じsliceはありません。

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

jQueryは.sortメソッドを持っていますが、jQueryメソッドの通常のフォーマットに従わないため正式には文書化されていません。

サポートされる唯一の方法は、apiにリストされている方法です。同じように必要に応じて独自の追加の配列のメソッドを追加することができ

$.fn.sort = [].sort; 

.sortは、次のように実装されています。

$.fn.reverse = [].reverse; 

.sortはjQueryをお使いのバージョンでは実装されていない場合は、それを自分で実装します。

関連する問題