0

我有以下代码用于删除基于 var“ColTypeCus”的选择项。

$(document).ready(function() {
    var ColTypeCus = '$FooVar';


    if (ColTypeCus.substr(0, 21) == "Machinery") {
        $("select#ctl00_PageBody_lstValuationSource option[value='3']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='1']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='2']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='4']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='5']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='12']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='13']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='14']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='15']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='16']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='18']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='19']").remove();
    }

    else if (ColTypeCus.substr(0, 7) == "Banking") {
        $("select#ctl00_PageBody_lstValuationSource option[value='17']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='3']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='7']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='8']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='9']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='10']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='11']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='12']").remove();
    }

    else if (ColTypeCus.substr(0, 19) == "Inventory") {
        $("select#ctl00_PageBody_lstValuationSource option[value='3']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='1']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='2']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='4']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='5']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='12']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='14']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='15']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='16']").remove();
        $("select#ctl00_PageBody_lstValuationSource option[value='18']").remove();
    }

});

它工作得很好,但我想知道是否有一种更优雅的方式(更少的代码行)我可以实现来做同样的事情。

一个想法是指定在数组中列出要删除的项目并循环遍历这些项目。

***pseudocode***
    var ColType = ''
    var RemoveThis = ''

    if Coltype = "Machinery"
       RemoveThis = ('1,3,5,7,9');
             {
               $("select#ctl00_PageBody_lstValuationSource option[value='+RemoveThis+']").remove();
              }

    elseif Coltype = "Banking"
       RemoveThis = ('2,4,6,8');
            {
                $("select#ctl00_PageBody_lstValuationSource option[value='+RemoveThis+']").remove();
            }

有什么建议么?

4

4 回答 4

4

您可以通过传递要删除选项的选择对象和值数组来创建一个函数来简化它。

现场演示

function removeFromSelect(yourSelect, arrOptionsVal)
{
    $(yourSelect).find('option').filter(function(){
         return arrOptionsVal.indexOf(this.value) != -1;
    }).remove();      
}

这就是你的称呼

removeFromSelect($('#sel1'), ['3','4']);
于 2013-05-01T14:48:16.000 回答
2

使用 for 循环:

var items_to_remove = [1,3,5,7,9]

for(var i in items_to_remove) {
    $("select#ctl00_PageBody_lstValuationSource option[value=" + items_to_remove[i] + "]").remove();
}
于 2013-05-01T14:47:24.830 回答
0

好吧,您至少可以通过编写一个辅助函数来简化您的代码:

function removeItem(id) {
    $("select#ctl00_PageBody_lstValuationSource option[value='"+id+"']").remove();
}
...
removeItem(3);
removeItem(5);
etc;
于 2013-05-01T14:46:47.547 回答
0

这应该工作

$.each([1,3,5,7,9], function() {
    $("select#ctl00_PageBody_lstValuationSource option[value='"+this+"']").remove();
});
于 2013-05-01T14:47:24.720 回答