2013-04-28 48 views
7

Tôi gặp sự cố với chức năng trong javascript và không thể tìm ra lý do. Nó thực sự khá thẳng về phía trước. Tôi đang cố xóa tất cả các hàng trong bảng html. vì vậy tôi đã viết:Xóa các hàng trong bảng javascript

function delete_gameboard(){ 
    var table = document.getElementById("gameboard"); 
    var rowCount = table.rows.length; 
    for (var i = 0; i < rowCount; i++) { 
     table.deleteRow(i); 
    } 
} 

Tuy nhiên, nó sẽ chỉ xóa một nửa trong số đó. Ai có thể thấy điều gì gây ra hành vi kỳ lạ này?

+5

Có lẽ, khi bạn xóa một hàng, các chỉ mục của các hàng sẽ giảm xuống. Hãy thử: 'table.deleteRow (0);' – acdcjunior

Trả lời

23

Bởi vì khi bạn xóa hàng đầu tiên, hàng thứ hai sẽ trở thành đầu tiên, nó năng động.

Bạn có thể làm như sau:

while(table.rows.length > 0) { 
    table.deleteRow(0); 
} 
+0

Giúp hình dung những điều này hoặc đi qua nó sơ đồ trong mã giả :) Nhưng yeah, đó là một giám sát có xu hướng không làm nhiều hơn một lần! – clearlight

2

Các table hàng là sống, có nghĩa là nếu bạn xóa hàng 0 thì hàng tiếp theo trở thành hàng 0, chỉ cần không ngừng xóa hàng 0

function delete_gameboard(){ 
    var table = document.getElementById("gameboard"); 
    var rowCount = table.rows.length; 
    for (var i=0; i < rowCount; i++) { 
     table.deleteRow(0); 
    } 
} 
3

Nếu bạn xóa hàng đầu tiên, hàng thứ hai trở thành hàng đầu tiên mới.

tôi thích để làm điều này:

while(table.rows[0]) table.deleteRow(0); 
+0

thực sự phương pháp của bạn là rất tốt nhưng ở cả hai bên nếu "1" đặt sau đó mà không có tiêu đề làm sạch dữ liệu bảng. – Virbhadrasinh

2
function delete_gameboard(){ 
var table = document.getElementById("gameboard"); 
var rowCount = table.rows.length; 
for (var i=rowcount-1; i >=0; i--) { 
    table.deleteRow(i); 
} 
} 

Chỉ số của hàng thay đổi khi bạn xóa nó. Sử dụng vòng lặp ngược. Điều này cũng sẽ hữu ích nếu bạn đang sử dụng bất kỳ điều kiện nào để xóa các hàng. Nếu bạn đang xóa tất cả các hàng, sử dụng sau đây

while(table.rows.length) { 
    table.deleteRow(0); 
} 
5

Hãy xem xét điều này:

index 0: row #1 
index 1: row #2 
index 2: row #3 
index 3: row #4 
index 4: row #5 

bạn xóa chỉ số # 2 (hàng # 3), do đó động cơ DOM điều chỉnh các phím chỉ mục và bạn kết thúc với:

index 0: row #1 
index 1: row #2 
index 2: row #4 <---hey! index #2 is still there 
index 3: row #5 

bạn đang cơ bản đào một lỗ ở vị trí nơi bạn đang đứng, vì vậy khi bạn đào sâu hơn, bạn tự nhiên chìm sâu hơn và không bao giờ nhìn thấy bất kỳ sự tiến bộ ... cho đến khi bạn chạy ra khỏi hàng để xóa trong bảng.

-2

Nếu bạn đang sử dụng JQuery trong mã của bạn thì cách đơn giản nhất để xóa các hàng đang sử dụng đoạn mã sau:

$('#myTable tbody').html(''); 
+0

Không có thẻ jQuery, do đó câu trả lời phải nằm trong JS thuần túy. Điều này là tốt nhất một bình luận, nhưng không phải là một câu trả lời. –

0
function delRow() 
    { 
    var current = window.event.srcElement; 
    //here we will delete the line 
    while ((current = current.parentElement) && current.tagName !="TR"); 
    current.parentElement.removeChild(current); 
    } 
0

Bạn chỉ có thể đi:

document.getElementById("gameboard").innerHTML = ""; 
+0

Thêm một số giải thích với câu trả lời cho cách câu trả lời này giúp OP trong việc khắc phục sự cố hiện tại –

Các vấn đề liên quan