Al eliminar un elemento con JavaScript estándar, primero debe ir a su padre:
var element = document.getElementById("element-id");
element.parentNode.removeChild(element);
Tener que ir al nodo principal primero me parece un poco extraño, ¿hay alguna razón por la que JavaScript funcione así?
javascript
Zaz
fuente
fuente
element.remove()
directamente a partir de ES5. ¡No necesitas al padre!Respuestas:
Sé que aumentar las funciones DOM nativas no siempre es la mejor solución o la más popular, pero esto funciona bien para los navegadores modernos.
Y luego puedes eliminar elementos como este
o
Nota: esta solución no funciona para IE 7 y versiones inferiores. Para obtener más información sobre cómo extender el DOM, lea este artículo .
EDITAR : Revisando mi respuesta en 2019,
node.remove()
ha venido al rescate y se puede usar de la siguiente manera (sin el polyfill anterior):o
Estas funciones están disponibles en todos los navegadores modernos (no en IE). Lea más sobre MDN .
fuente
NodeList
oHTMLCollection
que son un conjunto de elementos tipo matriz. La segunda definición del método permite eliminar estos "conjuntos de elementos".document.getElementsByClassName("my-elements").remove();
. Editar: en realidad elimina un montón, pero requiere volver a ejecutarse para terminar. Pruébelo en esta página con la clase "comentario-copia".Crossbrowser e IE> = 11:
fuente
$.ready
alternativa más rápida que js a lasnoscript
etiquetas. Para usarlo como quería, tuve que envolverlo en unasetTimeout
función de 1 ms . Esto resuelve todos mis problemas a la vez. GraciasouterHTML
que todavía es una nueva (er) adición al estándar. Si está buscando soporte en cualquier software> 6 al momento de escribir, necesitará otra solución. Laremove
función mencionada por otros es un caso similar. Como de costumbre, es seguro implementar un polyfill.delete element
no hace nada ya que no puede eliminar variables en JS, solo teclas;) Verifique usted mismo que no funcionaconsole.log(element)
después dedelete element
...removeChild
(aproximadamente 6-7% en mi sistema). Ver jsperf.com/clear-outerhtml-v-removechild/2Puede hacer una
remove
función para no tener que pensar en ello cada vez:fuente
elem
aremove.elem
. De esa manera, la función se hace referencia a sí misma, por lo que no tiene que crear otra variable global. :-)function remove(id) { document.getElementById(id).parentNote.removeChild(document.getElementById(id)); }
Es lo que admite el DOM . Busque en esa página "eliminar" o "eliminar" y removeChild es el único que elimina un nodo.
fuente
element.remove();
funcionará. Quizás sea algo nuevo. Pero la primera vez para mí y funciona. Creo que debería haber funcionado siempre, ya que es muy básico, debe tener cosas.El DOM está organizado en un árbol de nodos, donde cada nodo tiene un valor, junto con una lista de referencias a sus nodos secundarios. Entonces
element.parentNode.removeChild(element)
imita exactamente lo que está sucediendo internamente: primero va al nodo primario, luego elimina la referencia al nodo secundario.A partir de DOM4, se proporciona una función de ayuda a hacer la misma cosa:
element.remove()
. Esto funciona en el 87% de los navegadores (a partir de 2016), pero no en IE 11. Si necesita admitir navegadores antiguos, puede:fuente
Para eliminar un elemento:
Para eliminar todos los elementos con, por ejemplo, un nombre de clase determinado:
fuente
if(list[i] && list[i].parentElement)
necesaria la línea? ¿No está garantizada la existencia de cada elemento por el hecho de que fue devuelto por elgetElementsByClassName
método?document.getElementsByClassName(...
puedes usar
element.remove()
fuente
element.remove()
no es JavaScript válido y solo funciona en ciertos navegadores como Chrome .element.remove()
es que es JavaScript válido con DOM4 y funciona en todos los navegadores modernos, naturalmente, con excepción de Internet Explorer.El
ChildNode.remove()
método elimina el objeto del árbol al que pertenece.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Aquí hay un violín que muestra cómo puedes llamar
document.getElementById('my-id').remove()
https://jsfiddle.net/52kp584L/
** **
No hay necesidad de extender NodeList. Ya se ha implementado.
** **
fuente
Puede eliminar directamente ese elemento utilizando el
remove()
método de DOM.Aquí hay un ejemplo:
fuente
De acuerdo con las especificaciones DOM nivel 4, que es la versión actual en desarrollo, hay algunos nuevos métodos de mutación mano disponibles:
append()
,prepend()
,before()
,after()
,replace()
, yremove()
.https://catalin.red/removing-an-element-with-plain-javascript-remove-method/
fuente
El nombre de la función es
removeChild()
, y ¿cómo es posible eliminar al hijo cuando no hay padre? :)Por otro lado, no siempre tiene que llamarlo como lo ha mostrado.
element.parentNode
es solo un ayudante para obtener el nodo padre del nodo dado. Si ya conoce el nodo padre, puede usarlo así:Ex:
https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild
================================================== =======
Para agregar algo más:
Algunas respuestas han señalado que en lugar de usar
parentNode.removeChild(child);
, puedes usarelem.remove();
. Pero como he notado, hay una diferencia entre las dos funciones, y no se menciona en esas respuestas.Si lo usa
removeChild()
, devolverá una referencia al nodo eliminado.Pero si lo usa
elem.remove();
, no le devolverá la referencia.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Este comportamiento se puede observar en Chrome y FF. Creo que vale la pena notar :)
Espero que mi respuesta agregue algo de valor a la pregunta y sea útil.
fuente
Las funciones que usan ele.parentNode.removeChild (ele) no funcionarán para los elementos que ha creado pero que aún no se han insertado en el HTML. Las bibliotecas como jQuery y Prototype utilizan sabiamente un método como el siguiente para evadir esa limitación.
Creo que JavaScript funciona así porque los diseñadores originales del DOM consideraban que la navegación padre / hijo y la navegación anterior / siguiente eran una prioridad más alta que las modificaciones DHTML que son tan populares hoy en día. Poder leer de un <input type = 'text'> y escribir en otro por ubicación relativa en el DOM fue útil a mediados de los 90, un momento en que la generación dinámica de formularios HTML completos o elementos de GUI interactivos apenas era un centelleo El ojo de algún desarrollador.
fuente
En mi humilde opinión: La razón de esto es la misma que he visto en otros entornos: está realizando una acción basada en su "enlace" a algo. No puede eliminarlo mientras está vinculado a él.
Como cortar la rama de un árbol. Siéntese en el lado más cercano al árbol mientras corta o el resultado será ... desafortunado (aunque divertido).
fuente
Este en realidad proviene de FireFox ... por una vez, IE estaba por delante del paquete y permitió la eliminación de un elemento directamente.
Esto es solo mi suposición, pero creo que la razón por la que debe eliminar a un niño a través de los padres se debe a un problema con la forma en que FireFox manejó la referencia.
Si llamas a un objeto para cometer hari-kari directamente, inmediatamente después de que muera, aún tienes esa referencia. Esto tiene el potencial de crear varios errores desagradables ... como no eliminarlo, eliminarlo pero mantener referencias que parecen válidas o simplemente una pérdida de memoria.
Creo que cuando se dieron cuenta del problema, la solución fue eliminar un elemento a través de su elemento primario porque cuando el elemento desapareció, ahora simplemente tiene una referencia al elemento primario. Esto detendría toda esa molestia y, por ejemplo, si se cierra un árbol nodo por nodo, se 'cerraría' bastante bien.
Debería ser un error fácilmente reparable, pero al igual que con muchas otras cosas en la programación web, el lanzamiento probablemente se apresuró, lo que llevó a esto ... y cuando llegó la próxima versión, suficientes personas lo estaban usando para cambiar esto. a romper un montón de código.
Nuevamente, todo esto es simplemente mi conjetura.
Sin embargo, espero con ansias el día en que la programación web finalmente obtenga una limpieza completa de primavera, se limpien todas estas pequeñas idiosincrasias extrañas y todos comiencen a jugar con las mismas reglas.
Probablemente el día después de que mi criado robot me demanda por salarios atrasados.
fuente
removeChild
es un método de la interfaz DOM Nivel 1Node
.Por lo que entiendo, eliminar un nodo directamente no funciona en Firefox, solo Internet Explorer. Por lo tanto, para admitir Firefox, debe ir al padre para eliminar su hijo.
Ref: http://chiragrdarji.wordpress.com/2007/03/16/removedelete-element-from-page-using-javascript-working-in-firefoxieopera/
fuente
fuente
Esta es la mejor función para eliminar un elemento sin error de script:
Nota a
EObj=document.getElementById(EId)
.Este es UN signo igual no
==
.si
EId
existe un elemento , la función lo elimina; de lo contrario, devuelve falso, noerror
.fuente