Domanda

Mi ha coinvolto in una discussione su DOM attuazione stranezze ieri, ha dato origine ad una domanda interessante per quanto riguarda il Testo.splitText e Elemento.normalizzare i comportamenti, e come devono comportarsi.

In DOM Level 1 Core, Di testo.splitText è definito come...

Rompe questo nodo di Testo in due nodi di Testo all'offset specificato, mantenendo sia nella struttura, come fratelli.Questo nodo, quindi, solo contiene tutto il contenuto fino al punto di fuoriuscita.E un nuovo nodo di Testo, che viene inserito come prossimo un fratello di questo nodo, contiene tutto il contenuto e dopo il punto di offset.

La normalizzazione è...

Mette tutti i nodi di Testo in tutta la sua profondità sotto-albero al di sotto di questo Elemento in un "normale" la forma in cui solo markup (ad esempio, tag, commenti, istruzioni di elaborazione, le sezioni CDATA, e i riferimenti a entità) separa i nodi di Testo, cioè, non ci sono i nodi di Testo adiacenti.Questo può essere utilizzato per garantire che la vista DOM di un documento è lo stesso, se è stato salvato e ricaricato, ed è utile quando le operazioni (come XPointer ricerche) che dipendono da una particolare struttura del documento struttura devono essere utilizzati.

Così, se prendo un nodo di testo contenente "Ciao Mondo"), con riferimento in textNode, e fare

textNode.splitText(3)

textNode ora è il contenuto di "Ciao", e un nuovo fratello, contenente "Mondo"

Se poi

textNode.parent.normalize()

che cosa è textNode?La specifica di non rendere chiaro che textNode ha ancora un figlio del suo padre precedente, appena aggiornato a contenere tutti i nodi di testo adiacenti (che sono poi rimossi).Sembra essere un conforment comportamento per rimuovere tutte le i nodi di testo adiacenti, e quindi creare un nuovo nodo con la concatenazione dei valori, lasciando textNode per indicare qualcosa che non è più parte dell'albero.O saremo in grado di aggiornare textNode nello stesso modo in splitText, in modo che mantiene la posizione nell'albero, e ottiene un nuovo valore.

La scelta di comportamento è molto diverso, e non riesco a trovare un chiarimento su quale sia quella corretta, o se si tratta semplicemente di una svista nella specifica (che non sembra essere chiarita nei livelli 2 o 3).Possibile qualsiasi DOM/XML guru po ' di luce?

È stato utile?

Soluzione

Ero sul DOM Gruppo di Lavoro nei primi giorni;Sono sicuro che ci significato per textNode per contenere il nuovo entrato valore, ma se non abbiamo dire in spec, è possibile che alcuni attuazione potrebbe creare un nuovo nodo invece di riutilizzare textNode, però, che richiedono più lavoro per implementors.

In caso di dubbio, il programma in fase di contenimento.

Altri suggerimenti

Mentre sembrerebbe un'ipotesi ragionevole, sono d'accordo che non è explicityly chiaro nella specifica.Tutto quello che posso aggiungere è che il modo in cui l'ho letto, uno dei due textNode o è nuovo di pari livello (es.valore restituito da splitText) dovrebbe contenere il nuovo entrato valore - l'istruzione specifica che tutti i nodi nel sotto-albero sono messi in forma normale, non è che il sotto-albero è normalizzata ad una nuova struttura.Credo che l'unica cosa sicura è quello di mantenere un riferimento al padre prima di normalizzazione.

Penso che tutte le scommesse sono spenti qui;Io di certo non dipende da un determinato comportamento.L'unica cosa sicura da fare è quello di ottenere il nodo dal padre di nuovo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top