2010-02-19 48 views
9

Tôi đang sử dụng jQuery và có một phần tử bảng có chứa vài trăm hàng. Tôi muốn xóa tất cả các hàng và sau đó thêm một tập hợp các hàng mới. Tôi làm điều này bằng cách gọi loại bỏ và sau đó nối thêm vào phần tử cha.Cách nhanh nhất để xóa các phần tử con khỏi DOM trong IE là gì?

Logic append của tôi là khá nhanh, và sau những lời khuyên đưa ra ở đây: http://www.learningjquery.com/2009/03/43439-reasons-to-use-append-correctly

Tuy nhiên, các cuộc gọi duy nhất để loại bỏ mất 5 lần miễn là append. Cách nhanh nhất để xóa trẻ em của một yếu tố dom là gì?

EDIT: Đây là một phiên bản đặc của mã tôi sử dụng:

var table = $('#mytable'); 
$('tbody', table).remove(); 
table.append(tBodyContents.join('')); 

tBodyContents là một mảng các chuỗi, mà khi kết hợp sẽ tạo thành một html cho các hàng trong tbody.

+0

bạn có thể chỉ cho chúng tôi mã của bạn? – Sampson

+0

bạn có thể đăng mã bạn sử dụng để xóa tất cả các hàng không? – SBUJOLD

+0

Đặt nó vào đó; xin lỗi tôi đã không bao gồm nó trước đây! – bluemoo

Trả lời

6
function emptyElement(element){ 
    var i = element.childNodes.length; 
    while(i--){ 
    element.removeChild(element.lastChild); 
    } 
} 

điều này thực sự nhanh hơn lừa bên trongHTML, có thể nhanh hơn rất nhiều, tùy thuộc vào trình duyệt của bạn. có một vài bài kiểm tra trên jsperf sử dụng các chức năng tương tự sẽ cung cấp cho bạn một số tiêu chuẩn ...

+2

Ví dụ http://jsperf.com/jquery-empty-vs-html/14 –

+0

Tôi không chắc tại sao câu trả lời được chấp nhận là .html (''), trong khi đây thực ra là một giải pháp nhanh hơn nhiều. Việc đặt innerHTML hoặc .html() thành một chuỗi rỗng thực chất được coi là thực hành không đúng vì hiệu suất của nó. Để sao lưu các từ của tôi, đây là một thử nghiệm: http: // jsperf.com/innerhtml-vs-removechild/239 – boyomarinov

7

Tôi thường làm

$('#myTableToEmpty').html(''); 

Sau đó, lại thêm hàng khi cần thiết.

+0

Có lẽ nhanh hơn $ ('# myTableToEmpty tr'). Xóa() – ryanulit

+0

Tôi cũng làm như vậy. Nó đơn giản và nhanh chóng. +1 –

+3

Phương pháp này có xóa các sự kiện ràng buộc và dữ liệu jQuery không? Đó là một điều mà (theo các tài liệu) hàm remove() thực hiện. EDIT: Từ các tài liệu - * Ngoài các yếu tố tự, tất cả các sự kiện ràng buộc và dữ liệu jQuery liên kết với các yếu tố được loại bỏ * – user113716

1

Nếu tốc độ thực sự quan trọng, tốt nhất bạn nên sử dụng innerHTML. $ ('tbody', bảng) [0] .innerHTML = '';

Cá nhân tôi sẽ chỉ bỏ qua jQuery alltogether, cung cấp cho cơ thể một ID và chỉ cần đi cho các document.getElementById ('id'). InnerHTML = '' tùy chọn. Và offcourse vẫn sử dụng jQuery để thêm vào.

+0

Tôi nhận được một "lỗi thời gian chạy không xác định" khi tôi thử điều này. Tôi sẽ xem nếu tôi có thể tìm ra những gì tôi đang làm sai. – bluemoo

0

Tôi xác nhận innerHTML nhanh hơn rất nhiều để loại bỏ html lớn khỏi một phần tử duy nhất. Trong trường hợp của tôi:

$('#main').html(''); // --> approx 5-6 seconds 

$('#main').innerHTML=''; // --> a few milliseconds 

Cám ơn những lời khuyên

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