2009-06-27 11 views
9

Gibt es eine Möglichkeit, ein JavaScript-Dokument-Objekt durch Aufruf einer Funktion zu erstellen oder neu zu erstellen. So etwas wieein Javascript-Dokument erstellen Objekt

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

Ich möchte, dies zu tun, so kann ich das Problem in dieser Frage lösen client side xslt with javascript in firefox

+0

@PaulRoub diese Frage und die damit verbundenen Antworten sind datiert September 2011, das Duplikat ist die andere Frage vom Nov. 2011. Duplikation sollte basieren auf Veröffentlichungsdaten, das älteste ist das Original, bitte beheben Sie es. –

Antwort

5

Sie versuchen document.implementation.createDocument verwenden könnte. Sobald Sie Ihr Dokument haben, können Sie die Eigenschaft innerHTML verwenden, um HTML dafür einzustellen. Wenn Sie, dass in einem netten kleinen Paket eingewickelt möchten, können Sie etwas tun:

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

Und dann würden Sie die Funktion wie folgt verwenden:

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

Lassen Sie mich wissen, ob das, was man ist wir suchen nach.

1

Dies funktioniert in Firefox:

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

Beachten Sie, dass es Ihnen ein XMLDocument gibt, sondern als ein Htmldocument (wie Dokument selbst).

2

Wenn Sie schauen, um ein Dokument (wie in einem iframe) neu erstellen Sie können dies tun, mit ...

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

hier ist, wie Sie es verwenden, könnte das Dokument eines dynamisch erstellt neu 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(); 
11

Webkit war die erste die folgende Methode für diese Aufgabe schließen/aussetzen:

document.implementation.createHTMLDocument(title); 

Firefox ab Version 4, implementiert diese Methode auch während für frühere Versionen ist es möglich, eine HTML zu erstellen Dokument mit dem folgenden:

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

, die zu einem Dokument in etwa äquivalent sein sollten mit <!DOCTYPE html> (HTML5).

Ersetzen Sie die leeren Zeichenfolgen von 'createDocumentType' durch die erforderliche publicId/systemId.

Es wird noch notwendig sein, HTML-, Kopf- und Body-Elemente zu erstellen/an das resultierende Dokument anzuhängen, um ein funktionierendes DOM zu haben.

+0

OK, aber was, wenn 'Dokument' nicht definiert ist? Gibt es eine Möglichkeit, ein Dokument _ex nihilo_ zu erstellen?Sicherlich muss es eine Konstruktorfunktion geben? – Lori

+1

@ user1269964 verwenden Sie dann 'DOMImplementation' anstelle von' document.implementation'. https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation – m93a

+1

** BEARBEITEN: ** Entschuldigung. Nicht 'DOMImplementation', sondern' (neues Dokument()) .implementierung' – m93a

1

wenn create (...) gibt Ihnen Fehler analysieren, anpassen Dan Antwort verwenden createHTMLDocument() statt:

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

Verwendung als:

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

Ausgang:

[script foo.js] 
Verwandte Themen