What I would like to be able to do is create a string from a Javascript HTMLElement Object. For example:
var day = document.createElement("div");
day.className = "day";
day.textContent = "Random Text";
Now we have create the day
HTMLDivElement Object is it possible to make it print as a string? e.g.
<div class="day">Random Text</div>
Variant on Gump's wrapper, since his implementation lifts the target node out of the document.
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;
}
To print the resulting string on screen (re: escaped)
var escapedStr = nodeToString( node ).replace( "<" , "<" ).replace( ">" , ">");
outputNode.innerHTML += escapedStr;
Note, attributes like "class" , "id" , etc being stringified properly is questionable.
You can use this function (taken from pure.js)
function outerHTML(node){
return node.outerHTML || new XMLSerializer().serializeToString(node);
}
You can wrap that element into another element and use innerHTML
on it:
var wrapper = document.createElement("div");
wrapper.appendChild(day);
var str = wrapper.innerHTML;
Since a few years have passed since the last answers I found that .outerHTML
seems now to be supported by all major browsers (see: https://caniuse.com/#search=outerhtml).
So in order to get the HTML of an JS element you can do the following:
var day = document.createElement("div");
day.className = "day";
day.textContent = "Random Text";
console.log(day.outerHTML)
Which gives you: <div class="day">Random Text</div>
You need to create text node to add text for your created element like this:
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);
Why would you use createElement
if you can also directly parse a string?
Like: var string = '<div class="' + class + '">' + text + '</div>';
来源:https://stackoverflow.com/questions/4239587/create-string-from-htmldivelement