2011-07-29 12 views
0

にIはnameをそれぞれ有する<div>要素の束を持っています。私はjQueryのを使用して<div>の要素を照会したいと思いますが、私は彼らがnameに関してアルファベット順に来てほしいです。通常のコードクエリ要素のセットが、特定の順序

$("div").doStuff() 

特別な順序で要素を返しません。

+0

実際には、文書に表示されている順序で要素を返します。 – yitwail

答えて

3
$($("div").get().sort(function(a,b){ 
    if($(a).attr("name") === $(b).attr("name")) 
     return 0; 
    return $(a).attr("name") < $(b).attr("name") ? -1 : 1; 
})).each(function(){ $(this).doStuff(); }); 
+0

実際には動作しません。 2番目の '$()'呼び出しは以前に実行された順序を破棄します。 – Randomblue

+0

@Randomblueうーん、知っておもしろい。私は今それを配列として保持するように変更しました。 – Paulpro

+0

@Randomblueそれは実際に働いた。私はちょうどエラーがあり、名前属性の代わりにaとbを直接比較していました。それは今働く:) http:// jsfiddle。net/Paulpro/PrfZy/ – Paulpro

3

通常のJS配列に要素のリストを取得し、その配列を名前でソートし、jQueryオブジェクトに戻してからソートして最終的な操作を呼び出す以外の方法はありません注文。

function compareNameAlpha(a, b) { 
    var n1 = a.getAttribute("name"); 
    var n2 = b.getAttribute("name"); 

    if (n1 < n2) return(-1); 
    if (n1 == n2) return(0); 
    return(1); 
} 

var elArray = $("div").toArray().sort(compareNameAlpha); 
$(elArray).doStuff(); 

または1行ですべて完了:

$($("div").toArray().sort(compareNameAlpha)).doStuff(); 

がここにデモの作業:http://jsfiddle.net/jfriend00/qeLfX/


編集: jQueryのようにこれを行うにしても簡単な方法があるように見えます.sort()を直接サポートしています(ただし、jQueryソースでは内部使用のみとマークされています)。

$("div").sort(compareNameAlpha).each(doStuff); 

そして、ここでそのバージョンを参照してくださいhttp://jsfiddle.net/jfriend00/hJhhf/

+0

ヤンク!それは吸う。 – Randomblue

+0

ええ、それは吸うが、それを行う他の方法はありません。 DOM要素を「照会」することはできません。選択できるのはコンテンツと属性のみです。私はあなたもこれであなたを助けるjQueryプラグインを見つけることができると確信しています。 –

+0

@ jfriend00実際には、動作しません。 '$(elArray)'の中の '$()'は以前に行われた順序付けを破棄します。 – Randomblue

1

次のコードは、テストされていないが、私はあなたが次の線に沿って何かをすることができると思う:

$($("div").get().sort(sortFn)).each(doStuff); 

あなたはこれを行うことができますsortFnは、name属性によって要素を並べ替えArray.sortに適切な引数です。

+0

実際には動作しません。 2番目の '$()'呼び出しは以前に実行された順序を破棄します。 – Randomblue

+0

@Randomblue、私はそれがうまくいくと確信しています。 '.each'は順序を保持します。また、PaulPROのjsfiddleはこれを正確に行い、正常に動作します。 –

+1

は実際には、第二 '$()'クエリを使用すると、単一要素のみ(1列)を照会するので、以前に行われ順序を破壊することができませんでした。 1つの要素だけを順序付けすることはできません。 –

関連する問題