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

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

関連する問題