当前所选选项无法正确显示

时间:2013-08-17 04:15:25

标签: javascript

这是一个证明问题的jsFiddle。看看什么时候重新订购。未选择主select =“selected”。 http://jsfiddle.net/zuuyj/

我有一个选择框,使用此脚本进行排序

$(document).ready(function () {
    var options = $('select.pca31 option');
    var arr = options.map(function(_, o) {
        return {
            t: $(o).text(),
            v: o.value
        };
    }).get();
    arr.sort(function(o1, o2) {
        return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0;
    });
    options.each(function(i, o) {
        console.log(i);
        o.value = arr[i].v;
        $(o).text(arr[i].t);
    });

这样可以正常工作,直到您选择了一个选项(编辑项目),所选选项不会显示为已选中,因为它会重新排序列表。

我试过这个

$("select.pca31 option").empty().append( options );

基于此

What is the most efficient way to sort an Html Select's Options by value, while preserving the currently selected item?

但我只是得到一个无限循环。我明白为什么,但我看不出如何解决它。

2 个答案:

答案 0 :(得分:2)

为OP工作的解决方案是实现这个帖子的答案:

What is the most efficient way to sort an Html Select's Options by value, while preserving the currently selected item?

代码

var my_options = $(".pca31 option");

my_options.sort(function(a,b) {
    if (a.text > b.text) return 1;
    else if (a.text < b.text) return -1;
    else return 0;
})

$(".pca31").empty().append( my_options );

答案 1 :(得分:0)

您可以尝试使用此功能:

var options = [].slice.call($('select.pca31 option'),0),
i,len;
options.sort(function(a,b){
  return (a.text > b.text)? 1 :
    (a.text < b.text)? -1 : 0;
});
for(i = 0,len=options.length;i<len;i++){
  $("select.pca31").append(options[i]);
}