3 回答

TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
不確定為什么要弄亂documentFragments,您可以將HTML文本設(shè)置為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'));
如果您真的對(duì)documentFragment的想法感興趣,則可以使用此代碼,但仍必須將其包裝在div中才能獲得所需的DOM函數(shù):
function makeDocumentFragment(htmlText) {
var range = document.createRange();
var frag = range.createContextualFragment(htmlText);
var d = document.createElement('div');
d.appendChild(frag);
return d;
}

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
我不確定IE是否支持document.implementation.createHTMLDocument,但如果支持,請(qǐng)使用此算法(改編自DOMParser HTML擴(kuò)展)。請(qǐng)注意,DOCTYPE將不會(huì)保留。
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.
添加回答
舉報(bào)