I am using the following code to parse a string into DOM:
var doc = new DOMParser().parseFromString(string, 'text/xml');
Where string
is something like <!DOCTYPE html><html><head></head><body>content</body></html>
.
typeof doc
gives me object
. If I do something like doc.querySelector('body')
I get a DOM object back. But if I try to access any properties, like you normally can, it gives me undefined
:
doc.querySelector('body').innerHTML; // undefined
The same goes for other properties, e.g. id
. The attribute retrieval on the other hand goes fine doc.querySelector('body').getAttribute('id');
.
Is there a magic function to have access to those properties?
innerHTML is useful at any time to insert new HTML tags/content as a string, and can be more easily directed to specific elements in the DOM regardless of when/where the JavaScript is run.
To append using the innerHTML attribute, first select the element (div) where you want to append the code. Then, add the code enclosed as strings using the += operator on innerHTML.
'innerHTML' Presents a Security RiskThe use of innerHTML creates a potential security risk for your website. Malicious users can use cross-site scripting (XSS) to add malicious client-side scripts that steal private user information stored in session cookies. You can read the MDN documentation on innerHTML .
Your current method fails, because HTML properties are not defined for the given XML document. If you supply the text/html
MIME-type, the method should work.
var string = '<!DOCTYPE html><html><head></head><body>content</body></html>'; var doc = new DOMParser().parseFromString(string, 'text/html'); doc.body.innerHTML; // or doc.querySelector('body').innerHTML // ^ Returns "content"
The code below enables the text/html
MIME-type for browsers which do not natively support it yet. Is retrieved from the Mozilla Developer Network:
/* * DOMParser HTML extension * 2012-02-02 * * By Eli Grey, http://eligrey.com * Public domain. * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. */ /*! @source https://gist.github.com/1129031 */ /*global document, DOMParser*/ (function(DOMParser) { "use strict"; var DOMParser_proto = DOMParser.prototype , real_parseFromString = DOMParser_proto.parseFromString; // Firefox/Opera/IE throw errors on unsupported types try { // WebKit returns null on unsupported types if ((new DOMParser).parseFromString("", "text/html")) { // text/html parsing is natively supported return; } } catch (ex) {} DOMParser_proto.parseFromString = function(markup, type) { if (/^\s*text\/html\s*(?:;|$)/i.test(type)) { var doc = document.implementation.createHTMLDocument("") , doc_elt = doc.documentElement , first_elt; doc_elt.innerHTML = markup; first_elt = doc_elt.firstElementChild; if (doc_elt.childElementCount === 1 && first_elt.localName.toLowerCase() === "html") { doc.replaceChild(first_elt, doc_elt); } return doc; } else { return real_parseFromString.apply(this, arguments); } }; }(DOMParser));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With