2009-06-27 15 views
9

Czy istnieje sposób utworzenia lub odtworzenia obiektu dokumentu javascript przez wywołanie funkcji. Coś jakutwórz dokument javascript Obiekt

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

Chcę to zrobić tak mogę rozwiązać ten problem w tej kwestii client side xslt with javascript in firefox

+0

@PaulRoub to pytanie i związane z nim odpowiedzi są datowane na wrzesień 2011 r. Duplikat jest drugim pytaniem z listopada 2011 r. Powielanie powinno opierać się na daty publikacji, najstarszy jest oryginalny, proszę go poprawić. –

Odpowiedz

5

Można spróbować użyć document.implementation.createDocument. Po uzyskaniu dokumentu możesz użyć właściwości innerHTML, aby ustawić dla niego kod HTML. Jeśli chcesz, owinięte w estetycznym opakowaniu niewiele można zrobić coś takiego:

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

A potem, że korzystanie z funkcji takich jak to:

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

dać mi znać, jeśli to jest to, czego szukali.

1

To działa w Firefoksie:

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

Zauważ, że to daje XMLDocument, zamiast HTMLDocument (jak samego dokumentu).

2

Jeśli szukasz odtworzyć dokument (jak w iframe) można zrobić z ...

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

oto jak można używać go odtworzyć dokument dynamicznie utworzony 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 jako pierwszy include/wystawiać w następujący sposób dla tego zadania:

document.implementation.createHTMLDocument(title); 

Firefox od wersji 4, a także implementuje tej metody, podczas gdy w poprzednich wersjach możliwe jest stworzenie HTML dokument za pomocą następujących czynności:

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

która powinna być w przybliżeniu równa dokument posiadający <!DOCTYPE html> (HTML5).

Zamień puste ciągi "createDocumentType" na wymagany identyfikator publicId/systemId.

Nadal będzie trzeba utworzyć/dołączyć elementy HTML, head i body do wynikowego dokumentu, aby uzyskać działający DOM.

+0

OK, ale co, jeśli "dokument" jest niezdefiniowany? Czy istnieje sposób na stworzenie dokumentu _ex nihilo_?Z pewnością musi być funkcja konstruktora? – Lori

+1

@ user1269964 następnie użyj 'DOMImplementation' zamiast' document.implementation'. https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation – m93a

+1

** EDYCJA: ** Przepraszamy. Nie "DOMImplementation", ale "(new Document()). Implementation" – m93a

1

jeśli createDocument (...) daje analizowania błędów, dostosowania odpowiedź Dana korzystać createHTMLDocument() zamiast:

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

zastosowanie jako:

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

wyjściowa:

[script foo.js]