2012-04-10 112 views
2

我有一些HTML選擇元素與一些國家作爲選項。YUI - 刪除選擇的選項

<select id="countryLocation" class="selectCountryPrefix enablePartialForm" onchange="document.locationchangeform.submit()" name="country"> 
    <option selected="selected" disabled="disabled" value="">Select country</option> 
    <option class="showTos-AU" title="+61" value="AU">Australia</option> 
    <option class="showTos-CA" title="+1" value="CA">Canada</option> 
    <option class="showTos-CL" title="+56" value="CL">Chile</option> 
    <option class="showTos-DK" title="+45" value="DK">Denmark</option> 
    <option class="showTos-EE" title="+372" value="EE">Estonia</option> 
    <option class="showTos-FI" title="+358" value="FI">Finland</option> 
    <option class="showTos-GR" title="+30" value="GR">Greece</option> 
    <option class="showTos-HU" title="+36" value="HU">Hungary</option> 
    <option class="showTos-IE" title="+353" value="IE">Ireland</option> 
    <option class="default showTos-LV" selected="selected" title="+371" value="LV">Latvia</option> 
    <option class="showTos-TW" title="+886" value="TW">Taiwan</option> 
</select> 

我想刪除所有國家代碼不等於「TW」的選項。到目前爲止,這是我的代碼:

YAHOO.util.Event.addListener(window, "load", function() { 

    var E = YAHOO.util.Event; 
    var D = YAHOO.util.Dom; 

    var opts, 
     select, 
     i; 

    select = D.get('countryLocation'); 
    opts = select.options; 
    for (i=0; i< opts.length-1; i++){ 
     if (opts[i].value !== ""){ 
      if (opts[i].value !== "TW"){ 
       select.remove(i); 
      } 
     } 
    } 

}) 

它僅適用於某些選項 - 我猜想那是因爲它是由索引中刪除他們,那麼每一個去除之後,該指標正在發生變化。我真正想要的東西就像jQuery .each()函數。

我該如何在YUI或簡單的JS中做到這一點?

回答

2

另一種方法(對於布蘭特·奧爾森的答案)是向後遍歷:

for (i=opts.length-1; i >= 0; i--){ 
    if (opts[i].value !== ""){ 
     if (opts[i].value !== "TW"){ 
      select.remove(i); 
     } 
    } 
} 

我通常用這個方法去從一個陣列(迭代內)刪除對象時。

+0

這似乎很好地工作,非常感謝 – Xoundboy 2012-04-10 20:31:12

1

刪除選項後,您希望減少您的i值。否則,您將跳過您刪除的選項之後的所有選項。

for (i=0; i< opts.length-1; i++){ 
    if (opts[i].value !== ""){ 
     if (opts[i].value !== "TW"){ 
      select.remove(i); 
      --i; 
     } 
    } 
} 
+0

看來這種方法只有在所有選項都有國家代碼的情況下才能起作用。實際上,第一個選項'選擇國家'沒有,所以我結束了一個額外的國家剩餘 – Xoundboy 2012-04-10 20:30:48