2013-05-01 98 views
0

我有下面的代碼基於var「ColTypeCus」刪除選擇的項目。Jquery - 刪除選擇項目(通過陣列循環)

$(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(); 
      } 

有什麼建議嗎?

+2

這個問題應該被移動到[代碼審查(http://codereview.stackexchange.com/),記錯。 – MMM 2013-05-01 14:43:51

+0

我的工作也很完美 http://jsfiddle.net/egRv2/1/ – dt192 2013-05-01 18:28:11

+0

對不起 - 沒有看到您的jsfiddle解決方案在您的原始文章。 Thx – user1028445 2013-05-02 15:10:34

回答

1

使用一個循環:

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(); 
} 
+0

謝謝!這工作完美。 – user1028445 2013-05-01 15:40:03

+0

[Live Demo](http://jsfiddle.net/nkrid/egRv2/) – user1028445 2013-05-01 15:55:07

0

那麼,你至少可以通過寫一個輔助函數簡化代碼:

function removeItem(id) { 
    $("select#ctl00_PageBody_lstValuationSource option[value='"+id+"']").remove(); 
} 
... 
removeItem(3); 
removeItem(5); 
etc; 
0

這應該工作

$.each([1,3,5,7,9], function() { 
    $("select#ctl00_PageBody_lstValuationSource option[value='"+this+"']").remove(); 
}); 
4

你可以通過傳遞要爲其刪除選項的選擇對象和值數組來使其功能簡化。

Live Demo

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

這是你如何稱呼它

removeFromSelect($('#sel1'), ['3','4']);