我有一个包含行的表。在此表中,某些行的跨度为“add”类。当我点击“添加”时,我想动态创建一个新行。代码可以工作,但是当一个新行生成它时,它会在我的表的末尾。如何更改我的代码以仅在单击的行下添加新行,而不是在表的末尾?
这是我的代码:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<table id="prices-table" border="1">
<tr>
<td>1</td>
<td>Title<span class="add"><font color="red">add+</font></span></td>
<td>price</td>
</tr>
<tr>
<td>1</td>
<td>Title </td>
<td>price</td>
</tr>
</table>
<script>
$(document).ready(function () {
$(".add").click(function () {
$(this).closest('#prices-table')
.append('<tr><td>newrow</td><td>newrow</td><td>newrow</td></tr>');
});
})
</script>
</body>
</html>
答案 0 :(得分:6)
您可以closest
使用tr
,然后将append
替换为after
。
$(".add").click(function() {
$(this).closest('tr').after('<tr><td>newrow</td><td>newrow</td><td>newrow</td></tr>');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="prices-table" border="1">
<tr>
<td>1</td>
<td>Title<span class="add"><font color="red">add+</font></span></td>
<td>price</td>
</tr>
<tr>
<td>1</td>
<td>Title</td>
<td>price</td>
</tr>
</table>
答案 1 :(得分:2)
只需将closest("#prices-table")
更改为closest('tr')
,将append()
更改为after()
。
这将找到<tr>
元素,它是被点击元素的父元素,并在其后面添加内容。
请参阅.after()
的jQuery文档。
$(document).ready(function () {
$(".add").click(function () {
$(this).closest('tr').after('<tr><td>newrow</td><td>newrow</td><td>newrow</td></tr>');
});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="prices-table" border="1">
<tr>
<td>1</td>
<td>Title<span class="add"><font color="red">add+</font></span></td>
<td>price</td>
</tr>
<tr>
<td>1</td>
<td>Title </td>
<td>price</td>
</tr>
</table>
答案 2 :(得分:0)
您必须使用after
代替append
,因此您可以after
设置parent
span
这样的元素
$(document).ready(function () {
$(".add").click(function () {
$(this).parent('tr').after('<tr><td>newrow</td><td>newrow</td><td>newrow</td></tr>');
});
})
答案 3 :(得分:-1)
将点击功能的内容更改为:
CustomMapping
这样它会在最接近的$('<tr><td>newrow</td><td>newrow</td><td>newrow</td></tr>')
.insertAfter($(this).closest("tr"));
元素之后插入行。