2011-07-01 1110 views
12

document.getElementsByTagName me devolvió un objeto NodeList.¿Podemos eliminar directamente los nodos de una NodeList?

quisiera eliminar algunos artículos (digamos que me gustaría eliminar el primer elemento de la lista NodeList)

¿Hay una manera de hacerlo? (Soy consciente de que podría copiar manualmente todos los nodos en una matriz, pero no deseo hacer eso si NodeList por sí mismo ya tiene funciones para que eliminemos elementos)

Soy consciente de que eliminar elementos de una NodeList no tiene efecto en la pantalla (y no debería causar ningún navegador-visualización-actualización o cosas por el estilo, simplemente no deseo que el objeto NodeList tenga una referencia a ese nodo)

hay una manera de hacerlo ¿eso? (¿O me veo obligado a copiar todos los elementos de NodeList en una matriz?)

Respuesta

17

Como puede ver en el specification, no hay un método para eliminar un elemento de la lista.

No tendría sentido de todos modos. NodeList es en vivo, lo que significa que el DOM se busca nuevamente cada vez que accede a cierta propiedad, p. el length. De MDC:

(...) La lista lis devuelta en vivo, lo que significa que se actualiza automáticamente con el árbol DOM. (...)

Así que tienen que copiar los nodos en una matriz.

Puede hacerlo con bastante facilidad usando los métodos Array. P.ej. copiar y eliminar directamente el primer elemento:

var nodes = [].slice.call(elements, 1); 

El NodeList es un objeto array-similares. Por lo tanto, podemos aplicarle funciones de matriz, usando call[docs]. [].slice es solo una abreviatura para obtener una referencia al método slice[docs].

+11

ADVERTENCIA: esta es una respuesta anterior. Por el momento, NodeList no siempre está vivo. p.ej. querySelectAll() devuelve una NodeList no viva. – aMarCruz

Cuestiones relacionadas