2011-02-11 70 views
1

很簡單,但猜猜看是什麼,不適合我。我有這樣一個逗號分隔的列表:選項,選項2,選項3,我要追加到<select>所以它成爲<select><option>Option1</option><option>Option2</option><option>Option3</option></select>JQuery追加選擇一個數組

我可以「分裂」的名單像這樣(即獲取列表中的一個函數裏):

var optionsarray = $(this).val().split(','); 

    $(optionsarray).each(function(i){ 
     var seloption = '<option value="'+optionsarray[i]+'">'+optionsarray[i]+'</option>'; 
    }); 

但現在如何將seloption附加到我的選擇列表中。如果我把

$('#selecttoappendto').append('<option value="'+optionsarray[i]+'">'+optionsarray[i]+'</option>'); 

$('#selecttoappendto').append(seloption); 

裏面的每個循環什麼也沒有發生。把它拿出來,我可以追加說每個我可以追加說optionsarray[0],或optionsarray[1]等,但我不能去追加optionsarray[i]我怎麼做(每個內部或外部)。幫助請提前致謝

回答

3

從空字符串開始,您可以使用t +=在循環中創建一個字符串。然後.append()的字符串。

var optionsarray = $(this).val().split(','); 

var seloption = ""; 

$.each(optionsarray,function(i){ 
    seloption += '<option value="'+optionsarray[i]+'">'+optionsarray[i]+'</option>'; 
}); 

$('#selecttoappendto').append(seloption); 

或另一種選擇是單獨構建元素,將它們存儲在容器中,然後從容器中追加它們。

var optionsarray = $(this).val().split(','); 

var temp_sel = $('<select>'); 

$.each(optionsarray,function(i){ 
    temp_sel.append('<option>',{text:optionsarray[i], 
           value:optionsarray[i] 
           }); 
}); 

temp_sel.children().appendTo('#selecttoappendto'); 

修正了children後失蹤()

+0

非常感謝,完美,我「知道」+ = - 有點像。=在PHP中,但無法讓它工作,假設這就是爲什麼你聲明var seloption =「」;第一個 – 2011-02-11 13:58:30

+0

@Russell:是的,你需要在`+ =`之前用空字符串初始化它。 – user113716 2011-02-11 14:00:38

0

這是我寫的和使用的;它比user113716給出的解決方案快一點,因爲你跳過創建臨時選擇,所有那些附加到該臨時選擇(即使它是一個DOM片段,它仍然需要一些時間),你也是跳過.children()找到並解開最後的追加結尾。

// Appends multiple elements all at once; maintains chaining 
$.fn.appendAll = function ($eleArr) { 
    var numEles = $eleArr.length 
    , $useEle = new $(); 
    if (numEles) { 
     while (numEles--) { 
      $useEle = $eleArr[numEles].add($useEle); 
     } 
     return $(this).append($useEle); 
    } 
}; 

// Prepends multiple elements all at once; maintains chaining 
$.fn.prependAll = function ($eleArr) { 
    var numEles = $eleArr.length 
    , $useEle = new $(); 
    if (numEles) { 
     while (numEles--) { 
      $useEle = $eleArr[numEles].add($useEle); 
     } 
     return $(this).prepend($useEle); 
    } 
}; 

所以:

var optsArr = $(this).val().split(','), 
    $options = [], 
    thisOption; 

$.each(optsArr, function(i) { 
    thisOption = '<option value="' + optsArr[i] + '">' + optsArr[i] + '</option>'; 
    $options.push($(thisOption)); 
}); 

$yourSelect.appendAll(optsArr); 

其實我寫的正是這種這些插件;這樣做,我在250毫秒內建立了一個1500+選項。 :D