2013-07-24 91 views
0

我想生成兩個下拉列表(元素)並將它們作爲新行添加到表中。動態添加選擇對象到表

這兩個列表是通過讀取已存在的select元素創建的。

var sfp_opt = document.getElementById('sfp_opt'); 
var sfps = []; 
for (var i = 0; i < sfp_opt.children.length; ++i) { 
    var child = sfp_opt.children[i]; 
    if (child.tagName == 'OPTION') sfps.push(child.value); 
} 
counter += 1; 
var s1 = $("<select></select>"); 
s1.id = 'SfpSelId' + counter; 
s1.name = 'SfpSelName' + counter; 

for(var val in sfps) { 
    $("<option />", {value: val, text: sfps[val]}).appendTo(s1); 
} 

同樣,我正在創建另一個名爲s2的選擇元素。 我想將這兩個列表附加在單獨的<td>中,但同一行即<tr>。 所以,我想這些方法:

1) $("#sfp_det tbody").append('<tr><td>'+s1+'</td><td>'+s2+'</td></tr>');

而且是不正確此顯示爲UI.s1.val [目標對象]()也沒有幫助。

2)我可以使用.wrap()函數。這適用於一個列表。

$("#sfp_det tbody").append($(s1).wrap('<tr><td></td></tr>')); 

我的問題是我怎麼追加兩個列表同樣如此,我得到它的格式相當於<table><tr><td>list1(s1)</td><td>list2(s2)</td></tr></table>其中S1和S2是下拉列表或選擇元素?是否有可能使用.wrap()? 如果沒有,任何人都可以請建議我正確的語法來完成這個工作嗎?

+0

如果我理解正確的話,你可以使用wrapAll。 – inser

+0

我如何使用它?我已經試過了,它不起作用:'$(s1).wrap(''); $(s2).wrap('' ); $(「#sfp_det tbody」)。append($('。a1')。wrapAll(''));'我在這裏做錯了什麼? – cisnik

+0

我更新了我的回答(js鏈接)。 – inser

回答

1

您可以使用這樣的事情:

var select1 = $('<select>'); 
    var select2 = $('<select>'); 

    wrapWithTd(select1).add(wrapWithTd(select2)).wrapAll('<tr>');   

    $('table tbody').append(select1.parents('tr')); 

    function wrapWithTd(el) { 
     el.wrap('<td>'); 
     return el.parent(); 
    } 

看到: http://jsfiddle.net/inser/c36VT/