0

こんにちは、ボタンをクリックした後、あるリストからオプションを削除して別のリストに挿入する機能を作成したいのですが、選択したものよりも大きいサフィックスが付いたbeforeオプションが必要です。classクラス名はopt_$i、私が選択したときに、どちらが大きいopt_4か前に挿入したいです(常に5であるとは限らず、73になる可能性があります)opt

function minus(id)
{
    var c = $('select#'+ id +' option:selected');
    var cities = $('select[name=cities] option');

    c.each(function(){
       var item = $(this);
       var current = parseInt($(this).attr('class').replace(/[^0-9]/g, ''));

       cities.each(function(){
           var next = parseInt($(this).attr('class').replace(/[^0-9]/g, ''));

           if(next > current)
           {
               var next_item = $(this);
               return; // I dont know why this doesnt work ??
           }
       });
       /**
       if(previouse == 1)
       {
           $('select[name=cities] option:first').before(
                $('<option></option>')
                    .attr('value', current.val())
                    .attr('class', current.attr('class'))
                    .text(current.text())
           );    
       }
       else
       {
       */
           //$('select[name=cities] option[class=opt_'+ previouse +']').next()
           next_item.before(
                $('<option></option>')
                    .attr('value', current.val())
                    .attr('class', current.attr('class'))
                    .text(current.text())
           );
       //}
       $(this).remove();
    });
}

これを達成するためのより良い方法はありますか?? より大きなクラス値を見つけるためにオプションを挿入するたびにリストをループするよりも??

編集:

<select id="a">
  <option class="opt_3">a</option>
</select>

<select id="b">
 <option class="opt_1">c</option>
 <option class="opt_7">d</option>
</select>

ボタンをクリックした後、リストからオプションを削除してリストaに挿入したいbが、前にopt_7. opt_3 より大きいクラスを持つオプションを見つける方法 ??

SOULUTION http://jsfiddle.net/Atm8V/6/これがどのように機能するかです。すべてのコメントに感謝します。

4

1 に答える 1

1

選択の間に要素を削除および挿入している限り、何らかの種類の並べ替えを行う必要があります。

ほとんどの単一のオプションを select から select に移動する場合は、オプションの並べ替えの程度に合わせて最適化されていない可能性がある並べ替えアルゴリズムを呼び出すよりも、挿入時にターゲットの選択を反復して移動することをお勧めします。この点でのパフォーマンスの違いは無視できるかもしれませんが、リストにはあります。

複数のアイテムが定期的に一度に移動されることが予想される場合は、それらをターゲット select に挿入してから、そうのようにjQuery の sort メソッドを使用する方がよい場合があります。これにより、コード内の明示的な内部ループが取り除かれます (並べ替えで非表示にすることにより)。

2 つのオプションの違いは、もちろん、オプション リストの長さと、前に暗示したように、一度に転送される項目の平均予想数に依存します。insert-all-items-then-sort メソッドが機能する場合は、コードがよりモジュール化されて読みやすくなるため、そのルートに従います。

于 2012-06-12T15:46:52.413 に答える