$('#myTable').append('<tr><td>my data</td><td>more data</td></tr>');
在这样的表格中,您可以添加的内容是否有限制(例如输入、选择、行数)?是否有其他方法来做到这一点?
$('#myTable').append('<tr><td>my data</td><td>more data</td></tr>');
在这样的表格中,您可以添加的内容是否有限制(例如输入、选择、行数)?是否有其他方法来做到这一点?
<table id="myTable">
<tbody>
<tr>...</tr>
<tr>...</tr>
</tbody>
</table>
您最终会得到以下结果:
<table id="myTable">
<tbody>
<tr>...</tr>
<tr>...</tr>
</tbody>
<tr>...</tr>
</table>
因此, 我建议采用以下方法:
$('#myTable tr:last').after('<tr>...</tr><tr>...</tr>');
只要符合有效的HTML格式,你可以在after()
方法中包含任何内容,包括多行,就像上面的例子一样。
更新:重新审视这个回答,基于最近对此问题的活动。eyelidlessness发表了一个很好的评论,指出DOM中始终会有一个;这是正确的,但仅当至少有一行时才成立。如果没有行,除非您自己指定,否则不会有。
DaRKoN_ 建议将内容添加到而不是添加到最后一个之后。这避免了没有行的问题,但仍然不是万无一失的,因为理论上您可以有多个元素,行将被添加到其中每个元素。
权衡所有因素,我不确定是否存在一个单行解决方案,可以解决每种可能的情况。您需要确保jQuery代码与您的标记匹配。
我认为最安全的解决方案可能是确保您的标记中始终包含至少一个,即使它没有行。基于此,您可以使用以下内容,它可以处理任意数量的行(还考虑到多个元素):
$('#myTable > tbody:last-child').append('<tr>...</tr><tr>...</tr>');
jQuery内置了一种处理DOM元素的工具,可以实时对其进行操作。
你可以通过以下方式向表格中添加任何内容:
$("#tableID").find('tbody')
.append($('<tr>')
.append($('<td>')
.append($('<img>')
.attr('src', 'img.png')
.text('Image cell')
)
)
);
$('<some-tag>')
是jQuery中的一个标签对象,它可以有几个 attr
属性可以设置和获取,以及 text
,表示标签之间的文本:<tag>text</tag>
.
这个缩进看起来很奇怪,但是这个例子能更容易地让你明白发生了什么。
从 @Luke Bennett 回答这个问题后,情况已经发生了变化。下面是最新情况。
自jQuery 1.4(?)起,会自动检测您尝试插入的元素(使用任何一个append()
、prepend()
、before()
或after()
方法)是否为 <tr>
,并将其插入到您表格中的第一个 <tbody>
中,或者如果不存在,则将其包装成一个新的 <tbody>
。
因此,是的,您的示例代码是可接受的,并且在 jQuery 1.4+ 中可以正常工作。;)
$('#myTable').append('<tr><td>my data</td><td>more data</td></tr>');
如果你有一个 <tbody>
和一个 <tfoot>
,那会怎样呢?
例如:
<table>
<tbody>
<tr><td>Foo</td></tr>
</tbody>
<tfoot>
<tr><td>footer information</td></tr>
</tfoot>
</table>
那么它会将您的新行插入页脚 - 而不是正文。
因此,最好的解决方案是包含一个标记并使用.append,而不是.after。
$("#myTable > tbody").append("<tr><td>row content</td></tr>");
我知道你要求使用jQuery方法。我查了很多资料,发现我们可以通过以下函数以比直接使用JavaScript更好的方式来实现它。
tableObject.insertRow(index)
index
是一个整数,它指定要插入的行的位置(从 0 开始)。也可以使用 -1 的值将新行插入到最后一个位置。insertRow()
将在 Internet Explorer 中在最后位置插入新行,在 Chrome 和 Safari 中在第一个位置插入新行。
对于 HTML 表的每个可接受的结构都有效。
以下示例将在最后一行插入新行(使用 -1 作为索引):<html>
<head>
<script type="text/javascript">
function displayResult()
{
document.getElementById("myTable").insertRow(-1).innerHTML = '<td>1</td><td>2</td>';
}
</script>
</head>
<body>
<table id="myTable" border="1">
<tr>
<td>cell 1</td>
<td>cell 2</td>
</tr>
<tr>
<td>cell 3</td>
<td>cell 4</td>
</tr>
</table>
<br />
<button type="button" onclick="displayResult()">Insert new row</button>
</body>
</html>
希望它有所帮助。
我建议
$('#myTable > tbody:first').append('<tr>...</tr><tr>...</tr>');
相对于
$('#myTable > tbody:last').append('<tr>...</tr><tr>...</tr>');
first
和last
关键字作用于第一个或最后一个开始的标签,而不是闭合的标签。因此,如果您不想更改嵌套表格,而是要将其添加到整个表格中,则可以更好地处理嵌套表格。至少这是我发现的。
<table id=myTable>
<tbody id=first>
<tr><td>
<table id=myNestedTable>
<tbody id=last>
</tbody>
</table>
</td></tr>
</tbody>
</table>
在我看来,最快捷和清晰的方式是
//Try to get tbody first with jquery children. works faster!
var tbody = $('#myTable').children('tbody');
//Then if no tbody just select your table
var table = tbody.length ? tbody : $('#myTable');
//Add row
table.append('<tr><td>hello></td></tr>');
这里有一个演示 Fiddle
此外,我可以建议一个小函数来进行更多的HTML更改
//Compose template string
String.prototype.compose = (function (){
var re = /\{{(.+?)\}}/g;
return function (o){
return this.replace(re, function (_, k){
return typeof o[k] != 'undefined' ? o[k] : '';
});
}
}());
如果您使用我的字符串组合器, 您可以像这样做var tbody = $('#myTable').children('tbody');
var table = tbody.length ? tbody : $('#myTable');
var row = '<tr>'+
'<td>{{id}}</td>'+
'<td>{{name}}</td>'+
'<td>{{phone}}</td>'+
'</tr>';
//Add row
table.append(row.compose({
'id': 3,
'name': 'Lee',
'phone': '123 456 789'
}));
这是演示Fiddle
tbody
,则可以获得多个插入。 - Mark Schultheiss$("SELECTOR").last()
来限制你的标签集合。 - sulest$("#tableId").last().append("<tr><td>New row</td></tr>");
我是用以下方法解决的。
使用 jQuery
$('#tab').append($('<tr>')
.append($('<td>').append("text1"))
.append($('<td>').append("text2"))
.append($('<td>').append("text3"))
.append($('<td>').append("text4"))
)
$('#tab').append($('<tr>')
.append($('<td>').append("text1"))
.append($('<td>').append("text2"))
.append($('<td>').append("text3"))
.append($('<td>').append("text4"))
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="tab">
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
<th>City</th>
</tr>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
<td>New York</td>
</tr>
</table>
当表格中没有任何行时,以及每一行都非常复杂时,我会使用这种方法。
style.css:
...
#templateRow {
display:none;
}
...
xxx.html
...
<tr id="templateRow"> ... </tr>
...
$("#templateRow").clone().removeAttr("id").appendTo( $("#templateRow").parent() );
...