にIはname
をそれぞれ有する<div>
要素の束を持っています。私はjQueryのを使用して<div>
の要素を照会したいと思いますが、私は彼らがname
に関してアルファベット順に来てほしいです。通常のコードクエリ要素のセットが、特定の順序
$("div").doStuff()
特別な順序で要素を返しません。
にIはname
をそれぞれ有する<div>
要素の束を持っています。私はjQueryのを使用して<div>
の要素を照会したいと思いますが、私は彼らがname
に関してアルファベット順に来てほしいです。通常のコードクエリ要素のセットが、特定の順序
$("div").doStuff()
特別な順序で要素を返しません。
$($("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(); });
実際には動作しません。 2番目の '$()'呼び出しは以前に実行された順序を破棄します。 – Randomblue
@Randomblueうーん、知っておもしろい。私は今それを配列として保持するように変更しました。 – Paulpro
@Randomblueそれは実際に働いた。私はちょうどエラーがあり、名前属性の代わりにaとbを直接比較していました。それは今働く:) http:// jsfiddle。net/Paulpro/PrfZy/ – Paulpro
通常の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/
ヤンク!それは吸う。 – Randomblue
ええ、それは吸うが、それを行う他の方法はありません。 DOM要素を「照会」することはできません。選択できるのはコンテンツと属性のみです。私はあなたもこれであなたを助けるjQueryプラグインを見つけることができると確信しています。 –
@ jfriend00実際には、動作しません。 '$(elArray)'の中の '$()'は以前に行われた順序付けを破棄します。 – Randomblue
次のコードは、テストされていないが、私はあなたが次の線に沿って何かをすることができると思う:
$($("div").get().sort(sortFn)).each(doStuff);
あなたはこれを行うことができますsortFn
は、name属性によって要素を並べ替えArray.sort
に適切な引数です。
実際には動作しません。 2番目の '$()'呼び出しは以前に実行された順序を破棄します。 – Randomblue
@Randomblue、私はそれがうまくいくと確信しています。 '.each'は順序を保持します。また、PaulPROのjsfiddleはこれを正確に行い、正常に動作します。 –
は実際には、第二 '$()'クエリを使用すると、単一要素のみ(1列)を照会するので、以前に行われ順序を破壊することができませんでした。 1つの要素だけを順序付けすることはできません。 –
実際には、文書に表示されている順序で要素を返します。 – yitwail