2010-08-03 27 views
16

Tôi đã có một bố cục như thế này:Xóa các phần tử con được đưa ra một chỉ mục?

<div id='parent'> 

    <div id='row_0'></div> 

    <div id='row_1'></div> 

    <div id='row_2'></div> 

    ... 

    <div id='row_N'></div> 
</div> 

Tại một số điểm, tôi muốn loại bỏ tất cả div "hàng" ở trên một chỉ số nhất định, như:

for (var index = 1; index < $('#parent').children.length; index++) { 
    $('#parent').remove('#row_' + index); 
} 

là có một cách đơn giản hơn để làm điều này trong jquery? Một cái gì đó như 'chỉ cần loại bỏ tất cả trẻ em bắt đầu từ chỉ số N'?

(trên vòng lặp for sẽ không thực sự làm việc, nhưng là loại điều tôi sẽ làm gì nếu không có cách nào khác)

Trả lời

21

"Chỉ cần loại bỏ (tách) tất cả trẻ em của #parent, bắt đầu từ yếu tố N" :

$("#parent").children().slice(N).detach(); 

Nếu các phần tử sẽ không được lồng vào, sử dụng remove() thay vì detach() để loại bỏ dữ liệu và các sự kiện liên quan đến các yếu tố loại bỏ.

+0

+1 - Đây là câu trả lời duy nhất dường như làm những gì OP muốn (loại bỏ các phần tử tại và trên chỉ mục đã cho). Mặc dù, tôi chỉ sử dụng '.detach()' nếu bạn sẽ giữ một tham chiếu đến chúng và chèn lại, hoặc nếu bạn chắc chắn có * không * đính kèm 'dữ liệu'. – user113716

+0

... nó cũng là câu trả lời duy nhất đảm bảo rằng chỉ có hậu duệ trực tiếp được xem xét. – user113716

+0

@patrick, tôi có sử dụng remove() sau đó thay vì tách() không? Tôi không cần tham chiếu đến các div đã xóa nữa, và một số con của chúng (các phần tử trong mỗi div hàng) sẽ có> dữ liệu user246114

8

Để loại bỏ hàng 0 và 1 chọn hàng ít hơn 2 sử dụng lt selector và sau đó remove họ:

$('#parent div:lt(2)').remove(); 
+0

Ồ, tôi cần xóa các hàng lớn hơn chỉ mục - có phải là hoạt động tương tự, chỉ cần thay thế "lt" bằng "gt"? – user246114

+0

@ user246114 Có. http://api.jquery.com/gt-selector/ – Adam

+1

Một điều nữa: nếu bạn muốn loại bỏ phần tử có sử dụng chỉ mục đã biết 'eq'. Tài liệu [tại đây] (http://api.jquery.com/eq-selector/). –

4

Đây là một chủ đề cũ, nhưng tôi tò mò * tại sao không ai đề cập nth-child.

$("#parent > div:nth-child(n + " + index + ")").remove(); 

* Cập nhật: Tôi không có đủ đại diện để biết điều đó vào lúc đó, nhưng đã có câu trả lời là nth-child.

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