javascript - 使用 document.createDocumentFragment() 和 innerHTML 来操作 DOM

标签 javascript dom dom-manipulation

我正在创建如下文档片段:

var aWholeHTMLDocument = '<!doctype html> <html><head></head><body><h1>hello world</h1></body></html>';
var frag = document.createDocumentFragment();
frag.innerHTML = aWholeHTMLDocument;

变量 aWholeHTMLDocument 包含一个长字符串,它是页面的整个 html 文档,我想将它插入到我的 fragment 中以生成和操作动态 DOM。

我的问题是,一旦我将该字符串添加到 frag.innerHTML 中,它不应该加载该字符串并将其转换为 DOM 对象吗?

设置 innerHTML 后,我不应该通过属性访问 DOM 吗?

我试过 frag.childNodes 但它似乎不包含任何东西,我只想访问新创建的 DOM。

最佳答案

同时 DocumentFragment不支持 innerHTML , <template>

content <template> 的属性元素是 DocumentFragment所以它的行为方式相同。例如,您可以这样做:

var tpl = document.createElement('template');
tpl.innerHTML = '<tr><td>Hello</td><td>world</td></tr>';
document.querySelector('table').appendChild(tpl.content);

上面的例子很重要,因为你不能用 innerHTML 做到这一点和例如一个<div> , 因为 <div>不允许<tr>元素作为 child 。


注意: A DocumentFragment仍会剥离 <head><body>标签,所以它也不会做你想要的。你真的需要创建一个全新的 Document .

关于javascript - 使用 document.createDocumentFragment() 和 innerHTML 来操作 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8202195/

相关文章:

javascript - ASP.net 表单出现 JS 错误

javascript - jQuery 复选框选择器问题

javascript - 使用 jQuery 在树 (SVG) 中间插入 (g) 节点

javascript - 使用 insertAdjacentHTML() 添加部分 HTML

javascript - 在 PostCSS 中使用变量

javascript - 仅启用当前工作日的多日期选择器

java - DOM 解析器在纯 HTML RSS 帖子上接收 NullPointerException

javascript - 将 li 附加到 ul 时遇到问题

javascript - 如何使用 JSDoc 验证/检查类型?

javascript - 浏览器可以更改对标签的引用吗?