2012-04-10 93 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