2012-03-08 16 views
6

Sto usando javascript e voglio attraversare l'albero HTML, ottenendo tutto il testo così come appare all'utente. Tuttavia, sto perdendo informazioni sulla spaziatura.DOM Javascript, ottieni il testo del nodo senza perdere le informazioni sulla spaziatura

Diciamo che ho due documenti:

<html>XXX<p>YY YY</p><html> 

<html>XXX<p>YY&nbsp;&nbsp;&nbsp;YY</p><html> 

apparirà la prima con 1 spazio tra il Ys. Il secondo avrà 3 spazi. Tuttavia, se attraversare l'albero e, per ogni nodo #text, utilizzare:

text = node.nodeValue; 

quindi il testo per entrambi i nodi avranno 3 spazi. Non so più quale abbia gli spazi "reali" nbsp. Posso usare node.innerHTML per gli elementi p, che mostrerà il nbsp, ma non penso di poter usare innerHTML per ottenere solo il testo XXX (senza una sorta di sottrazione di testo).

Potrei semplicemente ottenere innerHTML dell'intero documento e analizzarlo. Tuttavia, ho anche bisogno di ottenere lo stile calcolato di ciascun elemento, che ho intenzione di ottenere utilizzando

window.getComputedStyle(theElement).getPropertyValue("text-align"); 

Quindi, sarò attraversamento ogni nodo. Inoltre, innerHTML mostra la sorgente così com'è, mentre attraversa i nodi "ripara" gli errori HTML, aggiungendo i tag finali, ecc. Questa è una cosa buona e qualcosa che vorrei mantenere.

+0

Interessante domanda. Puoi mostrare il tuo attuale codice trasversale per riferimento? –

+0

Ho creato una funzione che chiamo ricorsivamente. La funzione ottiene il nodeName dell'elemento e, se è un elemento #text, ottiene il valore nodeValue. Per ogni bambino (element.childNodes) chiama la funzione, restituendo il nome e le informazioni sul valore. – user984003

risposta

1

Cosa succede se si prova con charCode? Credo che uno spazio regolare sia 32, mentre &nbsp; è 160.

+0

Hai ragione! L'ho provato e funziona. Quindi l'informazione non è veramente persa. È solo che, nel modo in cui l'ho visualizzato, sono stati entrambi visualizzati come spazi. Sapendo questo, posso probabilmente anche trovare altri modi per ottenere le informazioni (ad esempio, nel mio codice Python, dopo aver inviato le informazioni nel modulo). Ora ho anche bisogno di pensare a quali altre conversioni devo fare. Suppongo che tutte le entità html, ecc. Grazie! – user984003

Problemi correlati