Reputation: 10547
I know how to append or prepend a new row into a table using jquery:
$('#my_table > tbody:last').append(html);
How to I insert the row (given in the html variable) into a specific "row index" i
. So if i=3
, for instance, the row will be inserted as the 4th row in the table.
Upvotes: 122
Views: 160714
Reputation: 7679
To add the right under a specific node(data-tt-id), this worked for me:
var someValue = "blah-id";
$("#tableID > tbody > tr[data-tt-id="' + someValue + '"]').after(row);
Upvotes: 0
Reputation: 518
Adding on to Nick Craver's answer and also considering the point raised by rossisdead, if scenario exists like one has to append to an empty table, or before a certain row, I have done like this:
var arr = []; //array
if (your condition) {
arr.push(row.id); //push row's id for eg: to the array
idx = arr.sort().indexOf(row.id);
if (idx === 0) {
if (arr.length === 1) { //if array size is only 1 (currently pushed item)
$("#tableID").append(row);
}
else { //if array size more than 1, but index still 0, meaning inserted row must be the first row
$("#tableID tr").eq(idx + 1).before(row);
}
}
else { //if index is greater than 0, meaning inserted row to be after specified index row
$("#tableID tr").eq(idx).after(row);
}
}
Hope it helps someone.
Upvotes: 0
Reputation: 1105
I know it's coming late but for those people who want to implement it purely using the JavaScript
, here's how you can do it:
tr
which is clicked.tr
DOM element.tr
parent node.HTML:
<table>
<tr>
<td>
<button id="0" onclick="addRow()">Expand</button>
</td>
<td>abc</td>
<td>abc</td>
<td>abc</td>
<td>abc</td>
</tr>
<tr>
<td>
<button id="1" onclick="addRow()">Expand</button>
</td>
<td>abc</td>
<td>abc</td>
<td>abc</td>
<td>abc</td>
</tr>
<tr>
<td>
<button id="2" onclick="addRow()">Expand</button>
</td>
<td>abc</td>
<td>abc</td>
<td>abc</td>
<td>abc</td>
</tr>
In JavaScript:
function addRow() {
var evt = event.srcElement.id;
var btn_clicked = document.getElementById(evt);
var tr_referred = btn_clicked.parentNode.parentNode;
var td = document.createElement('td');
td.innerHTML = 'abc';
var tr = document.createElement('tr');
tr.appendChild(td);
tr_referred.parentNode.insertBefore(tr, tr_referred.nextSibling);
return tr;
}
This will add the new table row exactly below the row on which the button is clicked.
Upvotes: 4
Reputation: 57
Note:
$('#my_table > tbody:last').append(newRow); // this will add new row inside tbody
$("table#myTable tr").last().after(newRow); // this will add new row outside tbody
//i.e. between thead and tbody
//.before() will also work similar
Upvotes: 4
Reputation: 322492
Try this:
var i = 3;
$('#my_table > tbody > tr:eq(' + i + ')').after(html);
or this:
var i = 3;
$('#my_table > tbody > tr').eq( i ).after(html);
or this:
var i = 4;
$('#my_table > tbody > tr:nth-child(' + i + ')').after(html);
All of these will place the row in the same position. nth-child
uses a 1 based index.
Upvotes: 19
Reputation: 44929
Use the eq selector to selct the nth row (0-based) and add your row after it using after, so:
$('#my_table > tbody:last tr:eq(2)').after(html);
where html is a tr
Upvotes: 1
Reputation: 630389
You can use .eq()
and .after()
like this:
$('#my_table > tbody > tr').eq(i-1).after(html);
The indexes are 0 based, so to be the 4th row, you need i-1
, since .eq(3)
would be the 4th row, you need to go back to the 3rd row (2
) and insert .after()
that.
Upvotes: 166