2010-08-03 16 views
16

Ich habe ein Layout wie diese bekommen:Entfernen von Kindern Elemente mit einem Index?

<div id='parent'> 

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

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

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

    ... 

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

Irgendwann, ich will alle div „Reihen“ über einem bestimmten Index entfernen, wie:

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

es einen einfacheren Weg ist um das in jquery zu tun? So etwas wie "Entferne einfach alle Kinder, die mit Index N beginnen".

(die oben für Schleife wird nicht wirklich funktionieren, aber ist die Art von Sache, die ich tun würde, wenn es keine andere Möglichkeit gibt)

Antwort

21

„Just entfernen (abzulösen) alle Kinder #parent, ab Elemente N“ :

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

Wenn die Elemente, verwenden werden wieder eingefügt werden nicht gehen remove() stattdessen mit den entfernten Elemente zugeordnet detach(), um Daten und Ereignisse zu verwerfen.

+0

+1 - Dies ist die einzige Antwort, die zu tun scheint, was OP will (entfernen Sie Elemente bei und über dem angegebenen Index). Obwohl ich '.detach()' nur verwenden würde, wenn Sie einen Verweis auf sie behalten und neu einfügen, oder wenn Sie sicher sind, dass * keine * angehängten 'Daten' sind. – user113716

+0

... es ist auch die einzige Antwort, die sicherstellt, dass nur direkte Nachkommen berücksichtigt werden. – user113716

+0

@patrick, würde ich remove() dann anstelle von detach() verwenden? Ich brauche keine Verweise mehr auf die entfernten divs, und einige ihrer Kinder (Elemente innerhalb jeder Zeile div) haben> Daten user246114

8

Um Zeilen 0 und 1 wählen Sie Zeilen weniger als 2 entfernen die lt selector und dann remove sie mit:

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

Oh, ich muss Zeilen größer als ein Index entfernen - ist es die gleiche Operation, ersetzen Sie einfach "lt" durch "GT"? – user246114

+0

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

+1

Eine weitere Sache: Wenn Sie das Element mit bekannten Index entfernen möchten, verwenden Sie 'eq'. Dokumentation [hier] (http://api.jquery.com/eq-selector/). –

4

Dies ist ein alter Thread, aber ich bin neugierig * warum niemand nth-child erwähnt.

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

* Update: Ich habe nicht genug rep habe es an der Zeit zu kennen, aber es hatte eine nth-child Antwort, gelöscht.

Verwandte Themen