Pregunta

me quedo preguntando por qué removeChild necesita un elemento padre. Después de todo, podríamos hacer simplemente

node.parentNode.removeChild(node);

A medida que el nodo principal debe ser siempre directamente disponible para el motor de Javascript / DOM, no es estrictamente necesario para abastecer el nodo padre del nodo que se va a quitar.

Por supuesto que entiendo el principio de que removeChild es un método de un nodo DOM, pero ¿por qué no hace algo como existen document.removeNode (que se limita a aceptar un nodo arbitrario como parámetro)?

EDIT: Para ser más claro, la pregunta es: ¿por qué lo hace el motor de necesidad JS el nodo padre en absoluto, si ya tiene el nodo (única) que es para ser eliminado

¿Fue útil?

Solución

creo que mantiene el diseño simple. Un nodo puede existe en forma aislada, pero el caso más interesante es el árbol DOM. Con removeChild, el nodo que ser eliminado debe ser un hijo del nodo en el que se llama al método.

Obtener una lista de todos los niños y haciendo una comparación manual de uno contra no es tan caro una operación. Sin embargo, buscando todos los descendientes de un nodo que se va a retirar es de hecho caro.

Editar : En respuesta a su actualización, un navegador es simplemente implementando el DOM spec , que define un en mi opinión , tiene que ser inequívoca y libre de supuestos. Es similar a inyección de dependencias desde esa perspectiva. El DOM Core especificaciones modelos a un árbol con bloques de construcción tales como Nodo, elemento, etc. La adición de un método solitario como en algún lugar removeNode en estos bloques de construcción mediante el método tiene conocimiento implícito sobre su entorno - que may ser un hijo de algún nodo, y debe ser retirado de allí si lo es.

La tarea de W3 es hacer una API muy robusto que hace que la mayoría de las cosas posibles. Ellos no deben preocuparse por el azúcar sintáctica como que siempre se puede escribir en torno a las API nativas si están bien escritos.

Otros consejos

La confusión podría deberse a que se podría pensar eliminación de un medios de elemento de algo así como matar o destruir a él.

introducir descripción de la imagen aquí

Pero, en realidad, el concepto de eliminación básicamente medios romper la relación entre un niño y su padre. Es sólo un destacamento.

introducir descripción de la imagen aquí

Por lo tanto, la eliminación de un elemento que no tiene nodo padre no tiene sentido. Y es razonable que, si se quiere romper esa conexión entre un padre y un hijo, que necesita una referencia a ambos.

Dicho esto, es cierto que a veces lo que desea retirar a un niño de su padre, sin preocuparse de que los padres en absoluto. Por eso DOM Nivel 4 introduce la ChildNode de interfaz, que proporciona la remove método.

Eso interfaz se implementa mediante DocumentType , Element y CharacterData , para que pueda usarlo en doctypes , elementos y Text , Comment , y ProcessingInstruction nodos .

Suponiendo node es uno de ellos, puede utilizar

node.remove();

En caso de que ya no tiene nodo padre, no pasa nada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top