2009-06-27 4 views
9

C'è un modo per creare o ricreare un oggetto documento javascript chiamando una funzione. Qualcosa di similecreare un documento javascript Oggetto

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

io voglio fare questo modo che io possa risolvere il problema in questa domanda client side xslt with javascript in firefox

+0

@PaulRoub questa domanda e le relative risposte sono datate settembre 2011, il duplicato è l'altra domanda del novembre 2011. La duplicazione deve essere basata su date di pubblicazione, il più vecchio è l'originale, si prega di risolvere il problema. –

risposta

5

Si potrebbe provare a utilizzare document.implementation.createDocument. Una volta ottenuto il documento, è possibile utilizzare la proprietà innerHTML per impostare l'HTML. Se si desidera che avvolto in un pacchetto di poco pulito si può fare qualcosa di simile:

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

E allora si sarebbe utilizzare la funzione in questo modo:

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

farmi sapere se questo è quello che cercavano.

1

questo funziona in Firefox:

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

Nota che ti dà un XMLDocument, piuttosto che un HTMLDocument (come documento stesso).

2

Se stai cercando di ricreare un documento (ad esempio in un iframe) è possibile farlo con ...

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

ecco come si potrebbe utilizzare per ricreare il documento di un creato in modo dinamico 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 è stata la prima ad includere/esporre il seguente metodo per quel compito:

document.implementation.createHTMLDocument(title); 

Firefox, a partire dalla versione 4, implementa anche questo metodo, mentre per le versioni precedenti, è possibile creare un HTML documentare utilizzando il seguente:

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

che dovrebbe essere approssimativamente equivalente a un documento avente <!DOCTYPE html> (HTML5).

Sostituire le stringhe vuote di 'createDocumentType' con la necessaria publicId/systemId.

Sarà comunque necessario creare/accodare html, testa e elementi del corpo al documento risultante di avere un DOM funzionante.

+0

OK, ma cosa succede se 'document' non è definito? C'è un modo per creare un documento _ex nihilo_?Sicuramente ci deve essere una funzione di costruzione? – Lori

+1

@ user1269964 quindi utilizzare 'DOMImplementation' invece di' document.implementation'. https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation – m93a

+1

** EDIT: ** Scusa. Non 'DOMImplementation' ma' (new Document()). Implementation' – m93a

1

se createDocument (...) consente di errori di analisi, di adattare la risposta di Dan utilizzare createHTMLDocument() invece:

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

uso come:

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

uscita:

[script foo.js]