Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在运行中重新排列选择列表?_Javascript_Jquery_Html - Fatal编程技术网

Javascript 如何在运行中重新排列选择列表?

Javascript 如何在运行中重新排列选择列表?,javascript,jquery,html,Javascript,Jquery,Html,在我的应用程序中,我有一个HTML选择框,根据各种用户操作从中删除和添加项目(项目变为可用/不可用)。但是,我也希望所有项目都按首选顺序显示,因此每次我将项目返回到选择列表时,我都需要按首选顺序重新排序并选择首选选项。到目前为止我一直不成功 这是我目前得到的: function update_select (select_id) { // Rebuild given select box with appropriate options var s = $

在我的应用程序中,我有一个HTML选择框,根据各种用户操作从中删除和添加项目(项目变为可用/不可用)。但是,我也希望所有项目都按首选顺序显示,因此每次我将项目返回到选择列表时,我都需要按首选顺序重新排序并选择首选选项。到目前为止我一直不成功

这是我目前得到的:

    function update_select (select_id) {
        // Rebuild given select box with appropriate options
        var s = $(select_id);
        s.empty();
        for (index in order_by_kind(selectable)) {
            var option = selectable[index];
            var s_option = $('<option value="' + option.value + '">' + option.desc + '</option>')
            s.append(s_option);
            if (index == 0) {
              s_option.attr('selected', true);
              console.log(s_option);
            }
        }
    }

尝试此方法,存储并还原选定的值:

function update_select (select_id) {
    // Rebuild given select box with appropriate options
    var s = $(select_id);
    var val = s.val();
    s.empty();
    for (index in order_by_kind(selectable)) {
        var option = selectable[index];
        var s_option = $('<option value="' + option.value + '">' + option.desc + '</option>')
        s.append(s_option);
    }
    s.val(val);
}
功能更新\u选择(选择\u id){
//使用适当的选项重建给定的选择框
var s=$(选择_id);
var val=s.val();
s、 空();
for(按顺序按种类索引(可选)){
var选项=可选[指数];
var s_option=$(''+option.desc+'')
s、 附加(s_选项);
}
s、 val(val);
}

尝试这种方法,存储并恢复选定的值:

function update_select (select_id) {
    // Rebuild given select box with appropriate options
    var s = $(select_id);
    var val = s.val();
    s.empty();
    for (index in order_by_kind(selectable)) {
        var option = selectable[index];
        var s_option = $('<option value="' + option.value + '">' + option.desc + '</option>')
        s.append(s_option);
    }
    s.val(val);
}
功能更新\u选择(选择\u id){
//使用适当的选项重建给定的选择框
var s=$(选择_id);
var val=s.val();
s、 空();
for(按顺序按种类索引(可选)){
var选项=可选[指数];
var s_option=$(''+option.desc+'')
s、 附加(s_选项);
}
s、 val(val);
}

问题在于,尽管我在遍历有序列表,但为了构建选项,我仍然在引用未排序的列表

function update_select (select_id) {
    // Rebuild given select box with appropriate options
    var s = $(select_id);
    s.empty();
    // sort and write back the selectable items
    selectable = order_by_kind(selectable);
    for (index in selectable) {
        var option = selectable[index];
        var s_option = $('<option value="' + option.value + '">' + option.desc + '</option>')
        s.append(s_option);
        if (index == 0) {
          s_option.attr('selected', true);
          console.log(s_option);
        }
    }
}
功能更新\u选择(选择\u id){
//使用适当的选项重建给定的选择框
var s=$(选择_id);
s、 空();
//对可选项进行排序并写回
可选=按种类订购(可选);
用于(可选择的索引){
var选项=可选[指数];
var s_option=$(''+option.desc+'')
s、 附加(s_选项);
如果(索引==0){
s_option.attr('selected',true);
console.log(s_选项);
}
}
}

问题在于,尽管我在遍历有序列表,但为了构建选项,我仍然在引用未排序的列表

function update_select (select_id) {
    // Rebuild given select box with appropriate options
    var s = $(select_id);
    s.empty();
    // sort and write back the selectable items
    selectable = order_by_kind(selectable);
    for (index in selectable) {
        var option = selectable[index];
        var s_option = $('<option value="' + option.value + '">' + option.desc + '</option>')
        s.append(s_option);
        if (index == 0) {
          s_option.attr('selected', true);
          console.log(s_option);
        }
    }
}
功能更新\u选择(选择\u id){
//使用适当的选项重建给定的选择框
var s=$(选择_id);
s、 空();
//对可选项进行排序并写回
可选=按种类订购(可选);
用于(可选择的索引){
var选项=可选[指数];
var s_option=$(''+option.desc+'')
s、 附加(s_选项);
如果(索引==0){
s_option.attr('selected',true);
console.log(s_选项);
}
}
}

这可能是一个死问题,但它是搜索结果中的第一个问题-因此我将在这里发布我的解决方案:fiddle包含value和html的比较函数

function reOrderOptions(select)
{ 
    function compareOptions(optionA, optionB) {
        return optionA.value - optionB.value;
    }
var options = $(select + " option");
$(select).empty().append(options.sort(compareOptions));
}

这可能是个死问题,但它是搜索结果中的第一个问题-因此我将在这里发布我的解决方案:fiddle包含value和html的比较函数

function reOrderOptions(select)
{ 
    function compareOptions(optionA, optionB) {
        return optionA.value - optionB.value;
    }
var options = $(select + " option");
$(select).empty().append(options.sort(compareOptions));
}

这似乎不起作用。我只是以一个空白的第一个元素结束,我的选项如下,仍然以错误的顺序。@vezult-你能发布你的
order\u-by\u-kind
方法让我做一个快速测试吗?另外,您是否总是希望在排序后只选择列表中的第一项?实际上,我认为我发现了问题(请参见下面的答案),但为了完整性,我也将发布该问题。关于第二个问题;是的,如果列表顺序正确,第一项应该是首选项。这似乎不起作用。我只是以一个空白的第一个元素结束,我的选项如下,仍然以错误的顺序。@vezult-你能发布你的
order\u-by\u-kind
方法让我做一个快速测试吗?另外,您是否总是希望在排序后只选择列表中的第一项?实际上,我认为我发现了问题(请参见下面的答案),但为了完整性,我也将发布该问题。关于第二个问题;是的,如果列表顺序正确,则首选第一项。