有没有办法通过调用函数来创建或重新创建javascript文档Object。像
这样的东西<script type="javascript/text">
var document = createDocument("some html");
</script>
我想这样做,所以我可以在这个问题中解决问题client side xslt with javascript in firefox
答案 0 :(得分:11)
Webkit是第一个为该任务包含/公开以下方法的人:
document.implementation.createHTMLDocument(title);
Firefox 4(版本4)也实现了此方法,而对于以前的版本,可以使用以下方法创建HTML文档:
var doc = document.implementation.createDocument('', '',
document.implementation.createDocumentType('html', '', ''));
应大致相当于具有<!DOCTYPE html>
(HTML5)的文档。
将'createDocumentType'的空字符串替换为所需的publicId / systemId。
仍然需要在生成的文档中创建/附加html,head和body元素以使其具有可用的DOM。
答案 1 :(得分: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>");
如果您正在寻找,请告诉我。
答案 2 :(得分: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]
答案 3 :(得分: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();
答案 4 :(得分:1)
这适用于Firefox:
document.implementation.createDocument(null, "rootElement", null)
请注意,它为您提供了XMLDocument,而不是HTMLDocument(如文档本身)。