2013-02-26 42 views
0

我有其中每行都包含两个元素的表:我的动态追加td在jquery/javascript中出现了什么问题?

<table> 
<tr><td>A</td><td>B</td></tr> 
<tr><td>C</td></tr> 
</table> 

我想追加用“d”细胞到最后一行(第2行是已经存在于当前表),但我有困难。

我试图执行:

$("table").children().get(1).append("<td>D</td>"); 

var elem = $("<td/>", { 
    text: 'D' 
}); 

$("table").children().get(1).appendChild(elem); 

,我得到的错误:

Uncaught Error: NotFoundError: DOM Exception 8 

把TBODY在那里不起作用或者:

$("table tbody").children().get(1).appendChild(elem); 

什么是正确的方法来做到这一点?

我不想只依赖“最后的td”,因为假设我有另一个元素“E”,我希望它自动添加到第三行本身,而不是将其作为第三列在第二排的末尾。

+0

在所有的可能性中,浏览器将自动包装内的所有''个' ',所以他们不是直接的孩子'

''了。 – Blazemonger2013-02-26 01:50:25

回答

0

你可以通过寻找下一莱特动态追加来自已存在的信件。可能需要根据您的要求进行修改。

HTML

<table> 
    <tr> 
     <td>A</td> 
     <td>B</td> 
    </tr> 
    <tr> 
     <td>C</td> 
    </tr> 
</table><button type="button" id="addanother" >Add</button> 

JS:

$('#addanother').on('click',function(){ 
    var length=$('table').find('td:last').parent().children().length; 
    var text=$('table').find('td:last').text(); 
    var nextlet=nextLetter(text); 
    if(length == 2){ 
     $('table').find('tr:last').after('<tr><td>'+nextlet+'</td></tr>'); 
    }else if(length == 1){ 
      $('table').find('td:last').after('<td>'+nextlet+'</td>'); 
    } 
    }); 

// To get alphabets from A-Z from a-z 
    function nextLetter(s){ 
return s.replace(/([a-zA-Z])[^a-zA-Z]*$/, function(a){ 
    var c= a.charCodeAt(0); 
    switch(c){ 
     case 90: return 'A'; 
     case 122: return 'a'; 
     default: return String.fromCharCode(++c); 
    } 
}); 

}

的Fiddler:http://jsfiddle.net/j98H7/1/

2

尝试:

$("table td:last").after("<td>D</td>"); 

jsFiddle example

结果结构:

<table> 
<tbody><tr><td>A</td><td>B</td></tr> 
<tr><td>C</td><td>D</td></tr> 
</tbody></table> 
+0

我想将“D”添加到表中已存在的第二行。 – Rolando 2013-02-26 01:51:33

+0

答复已更新。 – j08691 2013-02-26 01:54:01

+0

您提供的答案取决于“td”。如果我想在表格的第三行添加一个元素“E”(假设每行只能包含2列)。有没有比这更好的方法? – Rolando 2013-02-26 01:56:18

0

试试这个:

$('<td>D</td>').appendTo('table tr:eq(1)'); 
相关问题