2010-08-03 26 views
16

Tengo una disposición como ésta:¿Eliminar elementos secundarios dado un índice?

<div id='parent'> 

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

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

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

    ... 

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

En algún momento, quiero eliminar todas las "filas" div por encima de un determinado índice, como:

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

hay una manera más simple hacer esto en jquery? Algo así como 'simplemente eliminar a todos los niños a partir del índice N'?

(lo anterior para el lazo realmente no va a funcionar, pero es el tipo de cosas que haría si no hay otra manera)

Respuesta

21

"Basta con retirar (separar) a todos los niños de #parent, empezando por el elemento N" :

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

Si los elementos no van a ser reinsertado, utilice remove() en lugar de detach() con el fin de descartar los datos y eventos asociados con los elementos eliminados.

+0

+1 - Esta es la única respuesta que parece hacer lo que OP desea (eliminar elementos en y encima del índice dado). Aunque, solo usaría '.detach()' si va a mantener una referencia a ellos y volver a insertar, o si está seguro de que hay * datos * no * adjuntos. – user113716

+0

... también es la única respuesta que garantiza que solo se tengan en cuenta los descendientes directos. – user113716

+0

@patrick, ¿usaría remove() en lugar de detach()? Ya no necesito referencias a los divs eliminados, y algunos de sus hijos (elementos dentro de cada división de div) tendrán> data user246114

8

Para eliminar filas 0 y 1 seleccione filas de menos de 2 usando el lt selector y luego remove ellos:

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

Oh, necesito eliminar filas mayores que un índice. ¿Es la misma operación, simplemente reemplace "lt" por "gt"? – user246114

+0

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

+1

Una cosa más: si desea eliminar el elemento con índice conocido, use 'eq'. Documentación [aquí] (http://api.jquery.com/eq-selector/). –

4

Este es un viejo hilo, pero tengo curiosidad por qué nadie menciona * nth-child.

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

* Actualización: Yo no tengo representante suficiente para saber que en el momento, pero no había habido una respuesta nth-child, eliminado.

Cuestiones relacionadas