0

嗨,我想要创建功能,该功能将在单击按钮后从一个列表中删除选项并插入到另一个列表中,但后缀大于我选择的选项beforeclass类名是opt_$i这样的,当我选择opt_4我想在opt哪个更大之前插入它(它并不总是 5,它可以是 73)

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 可能比调用可能未针对您的选项的排序程度进行优化的排序算法更好list 将有,尽管在这一点上的性能差异可能可以忽略不计。

如果您希望定期一次移动多个项目,最好将它们插入到目标选择中,然后像这样使用 jQuery 的排序方法。这将摆脱代码中的显式内部循环(通过将其隐藏在排序中)。

当然,这两个选项之间的差异取决于选项列表的长度,以及正如我之前暗示的那样,一次传输的平均预期项目数。如果 insert-all-items-then-sort 方法适合您,我会遵循该路线,因为您的代码将更加模块化且易于阅读。

于 2012-06-12T15:46:52.413 回答