您好我想要创建功能,在单击按钮后从一个列表中删除选项并插入另一个before
选项class
选项,其中{m}后缀比我选择的更大。类名是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/这是它应该如何运作,感谢所有评论。
答案 0 :(得分:1)
只要您在select之间移除和插入元素,就需要进行某种类型的排序。
如果您从选择中移动大部分单个选项以选择它,那么通过在插入时迭代目标选择而不是调用可能未针对排序程度进行优化的排序算法来做到这一点可能更好您的选项列表将具有,但此点的性能差异可以忽略不计。
如果您希望定期移动多个项目,最好将它们插入到目标选择中,然后使用jQuery的排序方法like so。这将消除代码中的显式内部循环(通过将其隐藏在排序中)。
这两个选项之间的差异当然取决于选项列表的长度,并且正如我之前所暗示的那样,一次转移的项目的平均预期数量。如果insert-all-items-then-sort方法适合你,我会遵循这条路线,因为你的代码将更加模块化,易于阅读。