2009-06-27 12 views
9

Est-il possible de créer ou de recréer un objet de document javascript en appelant une fonction. Quelque chose commecréer un document javascript Objet

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

Je veux faire que je puisse résoudre le problème dans cette question client side xslt with javascript in firefox

+0

@PaulRoub cette question et les réponses connexes sont en date de Septembre 2011, le duplicata est l'autre question datée de novembre 2011. Duplication doit être basée sur dates de publication, le plus ancien est l'original, s'il vous plaît le corriger. –

Répondre

5

Vous pouvez essayer d'utiliser document.implementation.createDocument. Une fois que vous avez votre document, vous pouvez utiliser la propriété innerHTML pour définir le code HTML correspondant. Si vous voulez que enveloppé dans un emballage peu propre que vous pouvez faire quelque chose comme ceci:

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

Et alors vous utilisez la fonction comme ceci:

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

Laissez-moi savoir si cela est ce que vous nous recherchons.

1

Cela fonctionne dans Firefox:

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

Notez qu'il vous donne un XMLDocument, plutôt que d'un HTMLDocument (comme document lui-même).

2

Si vous cherchez à recréer un document (par exemple dans un iframe), vous pouvez le faire avec ...

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

Voici comment vous pouvez l'utiliser pour recréer le document d'une manière dynamique créée 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 a été le premier à inclure/exposer la méthode suivante pour cette tâche:

document.implementation.createHTMLDocument(title); 

Firefox, à partir de la version 4, met également en œuvre cette méthode alors que pour les versions précédentes, il est possible de créer un fichier HTML document à l'aide de ce qui suit:

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

qui devrait être à peu près équivalent à un document ayant <!DOCTYPE html> (HTML5).

Remplacez les chaînes vides de 'createDocumentType' par le publicId/systemId nécessaire.

Il sera toujours nécessaire de créer/ajouter des éléments html, head et body au document résultant pour avoir un DOM de travail.

+0

OK, mais que se passe-t-il si 'document' n'est pas défini? Y a-t-il un moyen de créer un document _ex nihilo_?Sûrement il doit y avoir une fonction de constructeur? – Lori

+1

@ user1269964 puis utilisez 'DOMImplementation' au lieu de' document.implementation'. https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation – m93a

+1

** EDIT: ** Désolé. Pas 'DOMImplementation' mais' (nouveau document()). Implémentation' – m93a

1

si createDocument (...) vous donne des erreurs d'analyse, adaptez la réponse de Dan à utiliser createHTMLDocument() à la place:

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

utilisation comme:

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

sortie:

[script foo.js] 
Questions connexes