2010-11-21 15 views
12

Quello che vorrei essere in grado di fare è creare una stringa da un oggetto HTMLElement Javascript. Per esempio:Crea stringa da HTMLDivElement

var day = document.createElement("div"); 
day.className = "day"; 
day.textContent = "Random Text"; 

Ora dobbiamo creare il day HTMLDivElement oggetto è possibile rendere la stampa come una stringa? per esempio.

<div class="day">Random Text</div> 

risposta

17

Variante sul wrapper di Gump, poiché la sua implementazione solleva il nodo di destinazione dal documento.

function nodeToString (node) { 
    var tmpNode = document.createElement("div"); 
    tmpNode.appendChild(node.cloneNode(true)); 
    var str = tmpNode.innerHTML; 
    tmpNode = node = null; // prevent memory leaks in IE 
    return str; 
} 

Per stampare la stringa risultante sullo schermo (re: sfuggito)

var escapedStr = nodeToString(node).replace("<" , "&lt;").replace(">" , "&gt;"); 
outputNode.innerHTML += escapedStr; 

nota, attributi come "classe", "id", ecc essere stringata correttamente è discutibile.

+0

Semplice ma efficace, proprio quello che stavo cercando. È un peccato che il metodo HTML esterno non sia supportato da Firefox. Grazie –

1

Perché dovresti usare createElement se puoi anche analizzare direttamente una stringa? Come: var string = '<div class="' + class + '">' + text + '</div>';

+0

Un sacco di motivi per cui op potrebbe aver bisogno di fare questo ... come faccio io. – Madbreaks

2

devi creare nodo di testo per aggiungere del testo per il vostro elemento creato in questo modo:

var day = document.createElement("div"); 
day.className = "day"; 
// create text node 
var txt = document.createTextNode('Random Text'); 
// add text to div now 
day.appendChild(txt); 
// append to body 
document.body.appendChild(day); 
12

È possibile utilizzare questa funzione (tratto da pure.js)

function outerHTML(node){ 
return node.outerHTML || new XMLSerializer().serializeToString(node); 
} 
5

È possibile avvolgere quell'elemento in un altro elemento e utilizzare innerHTML su di esso:

var wrapper = document.createElement("div"); 
wrapper.appendChild(day); 
var str = wrapper.innerHTML;