HTML 표의 모든 행 삭제


99

<th>Javascript를 사용 하고 테이블의 모든 행을 반복하지 않고 HTML 테이블의 모든 행을 삭제하려면 어떻게 해야합니까? 나는 매우 큰 테이블을 가지고 있고 그들을 삭제하기 위해 행을 반복하는 동안 UI를 고정하고 싶지 않습니다.


2
루프가 있어야하고 "delete-multiple-elements"명령 removeChild이 없으며 메소드 는 단일 DOM 요소 만 사용합니다.
Šime Vidas 2011 년

@SLaks는 그가 헤더 행을 포함하는 행을 의미한다고 가정합니다
Eonasdan

답변:


92

<th>A의 행 <thead>A의 다른 행을 <tbody>다음을 대체 할 <tbody>새로운 하늘의 하나.

var new_tbody = document.createElement('tbody');
populate_with_new_rows(new_tbody);
old_tbody.parentNode.replaceChild(new_tbody, old_tbody)

물론 JavaScript 개발자가 HTML을 수정할 수있는 경우 가장 효율적인 솔루션입니다.
Blazemonger

1
innerHTML 속성을 사용하여 tbody를 교체하려는 경우 IE에서는 작동하지 않지만 해결 방법이 있습니다.
aziz punjani

2
@Eonasdan — 다소 주관적입니다. 이 문제를 가진 누군가가 그들 중 하나를 사용 하여이 문제를 해결하기를 원할 경우 많은 라이브러리가 있습니다 (저의 개인적인 선호는 요즘 YUI 3을 사용하는 것입니다). 원칙은 포함하려는 타사 코드의 큰 덩어리에 관계없이 동일합니다.
Quentin 2011 년

3
이 Necromancing ... 무슨 잘못 : document.getElementById('tbody').innerHTML = '';
Trees4theForest

2
@ Trees4theForest 이것은 나를 위해 잘 작동합니다. 아마도 OP 당시에는 불가능했을 것입니다.
Mabu

94

그러면 모든 행이 제거됩니다.

$("#table_of_items tr").remove(); 

40
헤더를 삭제하지 않으려면 : $ ( "# table_of_items tbody tr"). remove ();
TTT

1
아주 좋은 간단한 대답입니다. 나는 내 CoffeeScript에서 사용했습니다-한 줄 솔루션을 좋아합니다$("tbody#id tr").remove()
n2o

JQuery를 사용할 것인지 여부에 따라 다르지만 이것이 허용되는 것보다 더 나은 대답이라고 생각합니다. 그러나 어떻게 든 .remove는 Chrome에서 작동하지 않았습니다.
Milind Thakkar 2015 년

TTT, <thead> <th> </ th> </ thead> 태그를 사용하여 테이블 헤드를 만듭니다. 그런 다음 $ ( "# table_of_items tr"). remove (); <tr> 태그 만 제거하기 때문에 잘 작동합니다.
Kate

TTT, 답변에 귀하의 의견을 추가하십시오. 당신의 대답은 완벽합니다!
Khorshid

57

매우 조잡하지만 이것은 또한 작동합니다.

var Table = document.getElementById("mytable");
Table.innerHTML = "";

9
불행히도 이것은 OP가 요구하는대로 헤더 <th>를 유지하지 않습니다.
JoSeTe4ever

1
그들은 자신의 헤더를 넣어 경우는 않습니다 <th> A의 중첩을 <thead>. 이것은 아마도 테이블을 작성하는 가장 구문 적으로 올바른 방법 일 것입니다.
Jon Black

잘 작동합니다. 나는 이것이 JQuery에서 테이블 헤더, 행, 셀, tbody 모든 것을 만든 나와 같은 사람들에게만 적합하다고 생각합니다.
Shamsul Arefin Sajib

이것은 tbody 내부의 html을 지우는 데
효과적이었습니다.

나는 이것에 약간의 수정과 함께 var bodyRef = document.getElementById('myTable').getElementsByTagName('tbody')[0]; bodyRef.innerHTML = '';
몸만 지 웠습니다

17

이것은 오래된 질문이지만 최근에 비슷한 문제가 발생했습니다.
이 코드를 작성하여 해결했습니다.

var elmtTable = document.getElementById('TABLE_ID_HERE');
var tableRows = elmtTable.getElementsByTagName('tr');
var rowCount = tableRows.length;

for (var x=rowCount-1; x>0; x--) {
   elmtTable.removeChild(tableRows[x]);
}

첫 번째 행을 제외한 모든 행이 제거됩니다.

건배!


9
더 짧고 빠름 : var rowCount = myTable.rows.length; while (-rowCount) myTable.deleteRow (rowCount);
Petar

위 주석의 코드는 첫 번째 행을 제거하지 않습니다
PrfctByDsgn

16

참고 포인트, 온 일반적인 실수에 대한 시계 아웃 :

시작 색인이 0 (또는 시작부터의 일부 색인)이면 올바른 코드는 다음과 같습니다.

var tableHeaderRowCount = 1;
var table = document.getElementById('WRITE_YOUR_HTML_TABLE_NAME_HERE');
var rowCount = table.rows.length;
for (var i = tableHeaderRowCount; i < rowCount; i++) {
    table.deleteRow(tableHeaderRowCount);
}

노트

1. deleteRow에 대한 인수가 고정되어 있습니다.
이는 행을 삭제할 때 행 수가 감소하기 때문에 필요합니다.
즉; 내가 도달 할 때 (rows.length-1), 또는 해당 행이 이미 삭제되기 전에도 오류 / 예외 (또는 자동 예외)가 발생합니다.

2. for 루프가 시작되기 전에 rowCount가 취해집니다. "table.rows.length"를 삭제하면 계속 변경되므로 집니다. 따라서 홀수 또는 짝수 행만 삭제된다는 문제가 있습니다.

도움이 되었기를 바랍니다.


10

테이블이 하나만 있다고 가정하여 유형만으로 참조 할 수 있습니다. 헤더를 삭제하지 않으려면 :

$("tbody").children().remove()

그렇지 않으면:

$("table").children().remove()

도움이 되길 바랍니다!


7

@strat가 게시 한 첫 번째 및 솔루션을 제외한 모든 행을 삭제해야했지만 잡히지 않은 예외가 발생했습니다 (존재하지 않는 컨텍스트에서 노드 참조). 다음은 나를 위해 일했습니다.

var myTable = document.getElementById("myTable");
var rowCount = myTable.rows.length;
for (var x=rowCount-1; x>0; x--) {
   myTable.deleteRow(x);
}

7

IDfor tbody를 선언 할 수 있다면 다음 함수를 실행하면됩니다.

var node = document.getElementById("tablebody");
while (node.hasChildNodes()) {
  node.removeChild(node.lastChild);
}

5

이것은 기본 HTML 테이블에서 반복 삭제를 작동합니다.

document.querySelectorAll("table tbody tr").forEach(function(e){e.remove()})

5

아래 코드는 훌륭하게 작동합니다. 헤더 행을 제외한 모든 행을 제거합니다. 그래서이 코드는

$("#Your_Table tr>td").remove();

3
잠깐, 이것은 jQuery 대답입니다. 원래 질문은 jQuery 솔루션을 특별히 요구하지 않았습니다!
revelt

4

일부 ID를 tbody 태그로 지정합니다. 즉. 그 후 다음 줄은 표 머리글 / 바닥 글을 유지하고 모든 행을 제거해야합니다.

document.getElementById("yourID").innerHTML="";

그리고 전체 테이블 (머리글 / 행 / 바닥 글)을 지우려면 테이블 수준에서 ID를 설정합니다.


3

제거 th하고 싶지 않고 내부 행을 제거하려는 경우 완벽하게 작동합니다.

var tb = document.getElementById('tableId');
  while(tb.rows.length > 1) {
  tb.deleteRow(1);
}

3

이건 어때요:

페이지가 처음로드되면 다음을 수행하십시오.

var myTable = document.getElementById("myTable");
myTable.oldHTML=myTable.innerHTML;

그런 다음 테이블을 지우고 싶을 때 :

myTable.innerHTML=myTable.oldHTML;

결과는 헤더 행이 될 것입니다. 시작하면 성능이 루핑보다 훨씬 빠릅니다.


매우 우아한 솔루션
19-07-06

2

<th>행이 아닌 행보다 훨씬 적 으면 <th>모든 <th>행을 문자열로 수집 하고 전체 테이블을 제거한 다음<table>thstring</table> 테이블이 있던 위치에 수 있습니다.

편집 : 분명히 "thstring"은 <th>s의 모든 행에 대한 html입니다 .


1
대신 <th>s를 DOM 요소로 수집하고 테이블의 innerHTML을 지운 다음 <th>s를 다시 추가 하십시오.
entonio

innerHTML 속성을 사용하여 clear tbody를 교체하려는 경우 IE에서는 작동하지 않지만 해결 방법이 있습니다.
aziz punjani

2

이것은 테이블에 대한 var를 선언하지 않고도 IE에서 작동하며 모든 행을 삭제합니다.

for(var i = 0; i < resultsTable.rows.length;)
{   
   resultsTable.deleteRow(i);
}

1

이것은 헤더 행 (첫 번째 행)을 제거하지 않고이 문제를 해결하기 위해 방금 작성한 간단한 코드입니다.

var Tbl = document.getElementById('tblId');
while(Tbl.childNodes.length>2){Tbl.removeChild(Tbl.lastChild);}

그것이 당신을 위해 작동하기를 바랍니다 !!.


1

tbody에 대한 ID 또는 클래스를 지정하십시오.

document.querySelector("#tbodyId").remove();
document.querySelectorAll(".tbodyClass").remove();

당신은 반드시 당신이 원하는 방법 ID 또는 클래스 이름을 지정할 수 있습니다 #tbodyId또는 .tbodyClass.



-1

const 테이블 = document.querySelector ( 'table'); table.innerHTML === ''? null : table.innerHTML = ''; 위의 자바 스크립트가 잘 작동했습니다. 테이블에 데이터가 포함되어 있는지 확인한 다음 헤더를 포함한 모든 항목을 지 웁니다.

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