jQuery要素を正しい順序で挿入するvsdetach()。sort()?
-
28-10-2019 - |
質問
次のhtml構造があるとしましょう: ジェネラコディセタグプレ
新しい要素<li>3</li>
を要素を切り離して再分類せずに正しい順序で挿入することは可能ですか(そしてどのように)?理由は、要素を.detach()および.append()すると、ページのリフローが発生すると思います(要素が移動するととにかく発生すると思います)。しかし、何らかの理由で、追加/削除/並べ替え/追加よりも適切な場所に挿入する方がはるかにクリーンなようです。
jQueryでn番目の子セレクターを確認し、underscore.jsフレームワーク(要素の正しい位置を教えてくれる_.sortedIndex
を提供します)も使用していますが、理解できないようですそこに入れる正しい方法。
いくつかの背景: 私はbackbone.jsを使用しており、アイテムのコレクションがあります。次に、コレクションのビュー(またはコレクション内のアイテムごとのビュー?)が必要だと思います。コレクションに要素を追加すると、コレクションが適切に並べ替えられるようにコンパレータが設定されますが、ページのビューは並べ替えられません。
グーグル経由でここに来る人のために、私が最終的にbackbone.jsで思いついたものは次のとおりです: ジェネラコディセタグプレ
ここで実行: http://jsfiddle.net/dlamotte/L4j3b/ >
解決
jQueryを使用できます ジェネラコディセタグプレ
フィドルページ: http://jsfiddle.net/Hrjks/
さらに良い: ジェネラコディセタグプレ
このためのフィドル: http://jsfiddle.net/Hrjks/1/ >
他のヒント
最近同じ問題が発生し、次の機能で修正しました。 ジェネラコディセタグプレ
基本的には、parent
のすべての子を取得してから、filter
を実行します。値を比較するだけでよい場合は、コールバックを回避することで簡単に行うことができますが、私の場合は、いくつかの基準で並べ替えていたため、必要でした。
降順で並べ替える場合は、append
をprepend
に、before
をlast
に、first
をlast
に置き換えるだけで、機能するはずです。
遊び場で気軽にプレイしてください: http://jsfiddle.net/crodas/FMEkb/5/