2009-10-08 43 views
2

我有一個名爲tmp的數組一些jQuery/javascript的幫助。將項目添加到optgroup

var tmp = [「05」,「13」,「27」];

如果選項值等於tmp中的值,我想將該選項添加到特定的optgroup,否則將其添加到其他optgroup。我不斷收到所有添加到optgroup#2的選項,除了值爲「27」的選項。我做錯了什麼?

var groups = $("optgroup"); 
    $("option").each(function() { 
     var value = $(this).val(); 
     for (var x = 0; x < tmp.length; x++) { 
      var isMatch = (tmp[x] === value); 
      if (isMatch) { 
       $(this).appendTo($(groups[0])); 
      } else if (value.length > 0) { 
       $(this).appendTo($(groups[1])); 
      } 
     } 

    }); 

感謝您的任何指示,以糾正這一點。

〜CK在聖地亞哥

+0

如何獲得optgroup的特定選擇?如果我有2選擇2 optgroups在他們兩個然後我怎麼可以得到optgroup的第一選擇? – 2015-03-25 11:10:08

回答

1

您應該在每個appendTo語句後添加一箇中斷,以便您不會將該選項與所有tmp值進行比較。

var groups = $("optgroup");  
    $("option").each(function() {   
     var value = $(this).val();   
     for (var x = 0; x < tmp.length; x++) {    
      var isMatch = (tmp[x] === value);    
      if (isMatch) {     
        $(this).appendTo($(groups[0]));    
        break; 
      } else if (value.length > 0) {     
        $(this).appendTo($(groups[1]));    
        break; 
      }   
     }  
    }); 
1

首先,

$(this).appendTo($(groups[1])); 

可改爲

$(this).appendTo(groups[1]); 

你不需要再包裹元素插入一個jQuery對象,以追加到它,一個HTMLElement將工作正常。

你有你正在使用的HTML,你的<option>元素在哪裏檢查的價值?

編輯:

我已經稍微重寫你的代碼,這個工作正常(NB追加不會在IE6工作,我相信7,8太 - 在IE的innerHTML屬性的選擇元件只讀,所以使用createElement或Option構造函數來創建選項),

Working Example。將/編輯添加到URL以查看代碼。在工作示例中,我有一個數組中的選項元素,我假設你有一個類似的結構。

var groups = $("optgroup"); 
$('options').each(function() { 
    var $this = $(this); 
    var val = $this.val(); 
    if (tmp.indexOf(val) !== -1) { 
     $this.appendTo(groups[0]); 
    } 
    else if (val.length > 0) { 
     $this.appendTo(groups[1]); 
    } 
});