1

これは、問題を示す 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 );

これに基づいて

現在選択されている項目を保持しながら、Html Select のオプションを値で並べ替える最も効率的な方法は何ですか?

しかし、私は無限ループを取得します。理由はわかりますが、それを修正する方法がわかりません。

4

2 に答える 2

2

OPでうまくいった解決策は、この投稿からの答えをそのまま実装することでした:

現在選択されている項目を保持しながら、Html Select のオプションを値で並べ替える最も効率的な方法は何ですか?

コード

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 );
于 2013-08-17T05:07:34.600 に答える
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]);
}
于 2013-08-17T04:48:29.833 に答える