如何将body元素添加到空DOM文档中?

Ant*_*ine 12 javascript dom

我有一个代表页面正文的字符串,我想解析一些元素.我相信(随意反驳我)最好的方法是创建一个空文档,然后添加正文并使用标准的JS方法来获得我想要的东西.
但我似乎无法将正文添加到文档中.在chrome中,以下代码在第2行失败NO_MODIFICATION_ALLOWED_ERR: DOM Exception 7.

 var dom = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null);
 dom.firstChild.innerHTML = "<body><p>Hello world</p></body>";
Run Code Online (Sandbox Code Playgroud)

有没有办法实现我想要的?

Jos*_*ipt 9

由于我们比最初接受的答案多了几年,我想提供一个更现代的答案.

在Firefox 50.0.2中,您可以这样做:

document.body = document.createElement("body");
document.body.innerHTML = "<p>Hello World!</p>";
Run Code Online (Sandbox Code Playgroud)

这里创建了主体并直接分配给"document.body".一些阅读(https://html.spec.whatwg.org/multipage/dom.html#the-body-element-2)让我理解,文档的属性"body"可以是"null"或包含一个对象类型"body"或(不推荐)"frameset".

以下就不能正常工作,即产生一个空白页,因为分配给"document.body的"丢失:

var body = document.createElement("body");
body.innerHTML = "<p>Hello World!</p>";
Run Code Online (Sandbox Code Playgroud)

而不是document.body = body;你可以这样做: document.documentElement.appendChild(body);,而document.firstChild.appendChild(body);抛出一个错误("HierarchyRequestError:节点不能插入层次结构中的指定点").

有人可能会争论是否通过评估innerHTML添加段落是最好的方法,但这是另一个故事.


Ant*_*ine 0

无法编辑文档根元素的innerHTML,但可以编辑子节点的innerHTML。所以,这有效:

    var dom = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null);
    var body = dom.createElement("body");
    body.innerHTML = "<p>hello world</p>";
    dom.firstChild.appendChild(body);
Run Code Online (Sandbox Code Playgroud)