次のようなグリッド(divコンテナ)があります:
ただし、div #2 が div #1 の場所にある可能性もあります。これは CSS の位置によって行われるため、DOM の順序は同じになります。視覚的な順序を決定したい。これを行う方法はありjQuery selector
ますか?
// 回答として追加されたソリューション
次のようなグリッド(divコンテナ)があります:
ただし、div #2 が div #1 の場所にある可能性もあります。これは CSS の位置によって行われるため、DOM の順序は同じになります。視覚的な順序を決定したい。これを行う方法はありjQuery selector
ますか?
// 回答として追加されたソリューション
$(elem).position()
各 div の画面座標を取得するために使用します。top
プロパティとプロパティを調べることでleft
、視覚的な順序を推測できます。
これが私の解決策です
$("#grid > div.content").sort(function(a,b){
var atop = $(a).position().top;
var aleft = $(a).position().left;
var btop = $(b).position().top;
var bleft = $(b).position().left;
if(aleft == bleft && atop == btop) return 0;
else {
if(atop < btop) return -1
else if( atop > btop) return 1;
else { // same
if(aleft < bleft) return -1;
else return 1;
}
}
}).each( console.log($(this).attr('id')) );
それは不可能だと思います。ただし、次のようないくつかの回避策を使用できます。
css()
関数で div の CSS 位置を確認し、各 div にどのようなスタイルが適用されているかを確認します。その後、それらを配列で並べ替え、それぞれの css 位置で並べ替えますafter()
要素を CSS で再配置するのremove()
ではなく、要素の DOM 位置を実際に変更します。before()
position()
実際の表示位置を取得するために使用します。これをいくつかの境界に対してチェックし、それらを内部配列でそれらの位置に並べ替えます