10

有没有办法通过调用函数来创建或重新创建 javascript 文档对象。就像是

<script type="javascript/text">
  var document = createDocument("some html");
</script>

我想这样做,这样我就可以用 Firefox 中的 javascript 解决这个问题客户端 xslt 中的问题

4

5 回答 5

11

Webkit 是第一个为该任务包含/公开以下方法的:

document.implementation.createHTMLDocument(title);

Firefox 从版本 4 开始也实现了这种方法,而对于以前的版本,可以使用以下方法创建 HTML 文档:

var doc = document.implementation.createDocument('', '',
  document.implementation.createDocumentType('html', '', ''));

这应该大致相当于具有<!DOCTYPE html>(HTML5)的文档。

将“createDocumentType”的空字符串替换为所需的 publicId/systemId。

仍然需要在生成的文档中创建/附加 html、head 和 body 元素以拥有一个工作 DOM。

于 2011-09-12T00:52:24.337 回答
5

您可以尝试使用document.implementation.createDocument. 获得文档后,您可以使用该innerHTML属性为其设置 HTML。如果你想把它包裹在一个整洁的小包里,你可以这样做:

function createDocument(html) {
    var doc = document.implementation.createDocument ('http://www.w3.org/1999/xhtml', 'html',  null);
    doc.documentElement.innerHTML = html;
    return doc;
}

然后你会使用这样的函数:

var doc = createDocument("<body><span>Hello StackOverflow.com!</span></body>");

让我知道这是否是您想要的。

于 2009-06-27T02:46:36.573 回答
3

如果 createDocument(...) 给您解析错误,请调整 Dan 的答案以改用 createHTMLDocument() :

function createDocument(html, title) {
  var doc = document.implementation.createHTMLDocument(title)
  doc.documentElement.innerHTML = html
  return doc
}

用于:

var doc = createDocument('<!DOCTYPE html><html>'
    + '<head><script src="foo.js"></script></head>'
    + '<body></body></html>', 'test')
console.log(doc.getElementsByTagName('script'))

输出:

[script foo.js]
于 2011-09-19T20:14:30.333 回答
2

如果您要重新创建文档(例如在 iframe 中),您可以使用...

document.open();
document.write('<html><head></head><body>some stuff</body></html>');
document.close();

这是您如何使用它来重新创建动态创建的 iframe 的文档的方法。

var iframe = document.createElement('iframe'),
    iframeDoc = (iframe.contentDocument) 
              ? iframe.contentDocument : iframe.contentWindow.document;

document.getElementById('iframeContainer').appendChild(iframe);

iframeDoc.open();
iframeDoc.write('<html><head></head><body>howdy</body></html>');
iframeDoc.close();
于 2011-04-14T21:05:36.277 回答
1

这适用于 Firefox:

document.implementation.createDocument(null, "rootElement", null)

请注意,它为您提供 XMLDocument,而不是 HTMLDocument(如文档本身)。

于 2009-06-27T03:01:21.973 回答