¿Debería DOM dividir el texto y normalizar la composición para dar la identidad?

StackOverflow https://stackoverflow.com/questions/30049

  •  09-06-2019
  •  | 
  •  

Pregunta

Ayer me vi envuelto en una discusión sobre las peculiaridades de la implementación de DOM, lo que dio lugar a una pregunta interesante sobre los comportamientos de Text.splitText y Element.normalise, y cómo deberían comportarse.

En Núcleo DOM Nivel 1, Text.splitText se define como...

Divide este nodo de Texto en dos nodos de Texto en el desplazamiento especificado, manteniendo ambos en el árbol como hermanos.Este nodo entonces sólo contiene todo el contenido hasta el punto de desplazamiento.Y un nuevo nodo Texto, que se inserta como el siguiente hermano de este nodo, contiene todo el contenido en y después del punto de desplazamiento.

Normalizar es...

Pone todos los nodos de Texto en toda la profundidad del subárbol debajo de este Elemento en una forma "normal" donde sólo el marcado (por ejemplo, etiquetas, comentarios, instrucciones de procesamiento, secciones CDATA y referencias de entidades) separa los nodos de Texto, es decir, hay sin nodos de texto adyacentes.Esto se puede utilizar para garantizar que la vista DOM de un documento sea la misma que si se guardara y se recargara, y es útil cuando se van a utilizar operaciones (como búsquedas de XPointer) que dependen de una estructura de árbol de documento particular.

Entonces, si tomo un nodo de texto que contiene "Hola mundo", al que se hace referencia en textNode, y hago

textNode.splitText(3)

textNode ahora tiene el contenido "Hola" y un nuevo hermano que contiene "Mundo".

si yo entonces

textNode.parent.normalize()

¿Qué es el nodo de texto??La especificación no deja claro que textNode tiene que seguir siendo hijo de su padre anterior, simplemente actualizado para contener todos los nodos de texto adyacentes (que luego se eliminan).Parece ser un comportamiento conforme eliminar todos los nodos de texto adyacentes y luego recrear un nuevo nodo con la concatenación de los valores, dejando textNode apuntando a algo que ya no forma parte del árbol.O podemos actualizar textNode de la misma manera que en splitText, para que conserve su posición en el árbol y obtenga un nuevo valor.

La elección del comportamiento es realmente bastante diferente y no puedo encontrar una aclaración sobre cuál es el correcto o si se trata simplemente de un descuido en la especificación (no parece estar aclarado en los niveles 2 o 3).¿Puede algún gurú de DOM/XML arrojar algo de luz?

¿Fue útil?

Solución

Estuve en el Grupo de Trabajo DOM en los primeros días;Estoy seguro de que quiso decir para que textNode contenga el nuevo valor unido, pero si no lo hiciéramos decir está en las especificaciones, es posible que alguno implementación podría cree un nuevo nodo en lugar de reutilizar textNode, aunque eso requeriría más trabajo para los implementadores.

En caso de duda, programe a la defensiva.

Otros consejos

Si bien parece una suposición razonable, estoy de acuerdo en que no queda claro explícitamente en la especificación.Todo lo que puedo agregar es que, según lo leo, uno de los dos textNode o es un nuevo hermano (es decir,valor de retorno de splitText) contendría el nuevo valor unido: la declaración especifica que todos los nodos en el subárbol se ponen en forma normal, no es que el subárbol esté normalizado a una nueva estructura.Supongo que lo único seguro es mantener una referencia al padre antes de normalizar.

Creo que aquí todas las apuestas están canceladas;Ciertamente no dependería de ningún comportamiento determinado.Lo único seguro es recuperar el nodo de su padre.

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