Jquery는 특정 인덱스의 테이블에 새 행을 삽입합니다.


113

jquery를 사용하여 테이블에 새 행을 추가하거나 앞에 추가하는 방법을 알고 있습니다.

$('#my_table > tbody:last').append(html);

행 (html 변수에 주어진)을 특정 "행 색인"에 삽입하는 방법 i. 그래서 만약 i=3, 예를 들어, 행은 테이블의 4 행으로 삽입됩니다.


답변:


158

다음 .eq().after()같이 사용할 수 있습니다 .

$('#my_table > tbody > tr').eq(i-1).after(html);

인덱스는 그래서 당신은 필요, 4 행으로, 기반 0입니다 i-1때문에, .eq(3)4 행을 것입니다, 당신은 3 행 (다시 갈 필요 2) 삽입 .after()이 있습니다.


8
jQuery의 eq 함수에 음수 값이 주어지면 테이블 끝까지 반복됩니다. 이것을 실행하고 0 인덱스에 삽입하려고하면 새 행은 마지막에 삽입하게됩니다 그래서
rossisdead

2
.before(html)인덱스 앞에 삽입하려면 추가 하십시오
Abhi

1
테이블에 행이 없으면 실패한 사람이 첫 번째 행에서도 작동하는 솔루션 (인덱스 기반)을 가지고 있습니까?
MartinM 2014

@MartinM 행이 없어도 삽입 하는 경우 완전히 다른 시나리오입니다 (인덱스가 중요하지 않은 곳?)-무슨 일이 있어도 끝에 추가 하시겠습니까?
Nick Craver

@NickCraver, 아니요, 그냥 일반적인 인덱스 기반 솔루션 (이와 같은)을 찾고 있지만 처음에는 테이블이 비어 있습니다. 물론 테이블이 비어 있는지 확인하고 첫 번째 행을 삽입 한 다음 계속 진행할 수 있습니다. 당신의 방법, 그러나 이것은 나에게 우아하지 않은 것 같습니다 ..
MartinM

17

이 시도:

var i = 3;

$('#my_table > tbody > tr:eq(' + i + ')').after(html);

아니면 이거:

var i = 3;

$('#my_table > tbody > tr').eq( i ).after(html);

아니면 이거:

var i = 4;

$('#my_table > tbody > tr:nth-child(' + i + ')').after(html);

이들 모두는 행을 같은 위치에 배치합니다. nth-child1 기반 색인을 사용합니다.


4

노트 :

$('#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

4

늦게 올 것이라는 것을 알고 있지만 순수하게를 사용하여 구현하려는 사람들을 위해 JavaScript다음과 같이 할 수 있습니다.

  1. tr클릭 된 전류에 대한 참조를 가져옵니다 .
  2. trDOM 요소를 만듭니다 .
  3. 참조 된 tr상위 노드에 추가하십시오 .

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>

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;
    }

버튼을 클릭 한 행 바로 아래에 새 테이블 행이 추가됩니다.



1

사용 EQ 선택기를 n 번째 행 (0 기반) selct하고 사용 후 행을 추가 한 후 , 그래서 :

$('#my_table > tbody:last tr:eq(2)').after(html);

여기서 html은 tr


1
$('#my_table tbody tr:nth-child(' + i + ')').after(html);

0

Nick Craver의 답변에 추가하고 rossisdead가 제기 한 요점을 고려하면 빈 테이블에 추가해야하는 시나리오가 있거나 특정 행 앞에 추가해야하는 경우 다음과 같이했습니다.

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);
  }    
}

누군가에게 도움이되기를 바랍니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.