3 回答
TA贡献1839条经验 获得超15个赞
不确定为什么要弄乱documentFragments,您可以将HTML文本设置为innerHTML新div元素的。然后,您可以将该div元素用于getElementsByTagNameetc,而无需将div添加到DOM:
var htmlText= '<html><head><title>Test</title></head><body><div id="test_ele1">this is test_ele1 content</div><div id="test_ele2">this is test_ele content2</div></body></html>';
var d = document.createElement('div');
d.innerHTML = htmlText;
console.log(d.getElementsByTagName('div'));
如果您真的对documentFragment的想法感兴趣,则可以使用此代码,但仍必须将其包装在div中才能获得所需的DOM函数:
function makeDocumentFragment(htmlText) {
var range = document.createRange();
var frag = range.createContextualFragment(htmlText);
var d = document.createElement('div');
d.appendChild(frag);
return d;
}
TA贡献1757条经验 获得超7个赞
我不确定IE是否支持document.implementation.createHTMLDocument,但如果支持,请使用此算法(改编自DOMParser HTML扩展)。请注意,DOCTYPE将不会保留。
var
doc = document.implementation.createHTMLDocument("")
, doc_elt = doc.documentElement
, first_elt
;
doc_elt.innerHTML = your_html_here;
first_elt = doc_elt.firstElementChild;
if ( // are we dealing with an entire document or a fragment?
doc_elt.childElementCount === 1
&& first_elt.tagName.toLowerCase() === "html"
) {
doc.replaceChild(first_elt, doc_elt);
}
// doc is an HTML document
// you can now reference stuff like doc.title, etc.
添加回答
举报