2010-11-21 9 views
12

Lo que me gustaría poder hacer es crear una cadena desde un objeto JavaScript HTMLElement. Por ejemplo:Crear cadena de HTMLDivElement

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

Ahora tenemos crear el objeto HTMLDivElement day es posible hacer que imprima como una cadena? p.ej.

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

Respuesta

17

Variante en el contenedor de Gump, ya que su implementación saca el nodo de destino del 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; 
} 

Para imprimir la cadena resultante en la pantalla (re: escapado)

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

Nota, atributos como "clase", "id", etc. siendo Stringified correctamente es cuestionable.

+0

Simple pero eficaz, justo lo que estaba buscando. Es una pena que el método outerHTML no sea compatible con Firefox. Gracias –

1

¿Por qué usaría createElement si también puede analizar directamente una cadena? Al igual que : var string = '<div class="' + class + '">' + text + '</div>';

+0

Muchas razones por las cuales podría necesitar hacer esto ... como yo. – Madbreaks

2

Usted necesita crear nodo de texto para añadir texto para su elemento creado de esta manera:

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

Se puede utilizar esta función (tomado de pure.js)

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

Puede envolver ese elemento en otro elemento y usar innerHTML en él:

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