2009-05-03 15 views
171

¿Hay una manera de JS para obtener todo el HTML dentro del html etiquetas, como una cadena?¿Cómo obtener todo el documento HTML como una cadena?

document.documentElement.?? 
+6

La única respuesta correcta: http://stackoverflow.com/questions/ 817218/how-to-get-the-entire-document-html-as-a-string # answer-35917295 (** stop up-voting respuestas internas/externasHTML, ¡NO proporcionan la fuente completa! **) – John

Respuesta

233

MS añadió outerHTML las propiedades y innerHTML hace algún tiempo.

Según MDN, outerHTML es compatible con Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox Mobile 11, IE Mobile, Opera Mobile y Safari Mobile. outerHTML es en la especificación DOM Parsing and Serialization.

Ver quirksmode para la compatibilidad del navegador para lo que va a trabajar para usted. Todos admiten innerHTML.

var markup = document.documentElement.innerHTML; 
alert(markup); 
+14

outerHTML no obtiene el doctype. – CMCDragonkai

+0

funcionó como un encanto! ¡gracias! ¿Hay alguna manera de obtener el tamaño de cualquiera/todos los archivos vinculados al documento, incluidos los archivos js y css? – www139

+0

@CMCDragonkai: Puede [obtener el tipo de documento por separado] (http://stackoverflow.com/a/10162353/157385) y anteponerlo a la cadena de marcado. No es ideal, lo sé, pero es posible. –

37

Creo que document.documentElement.outerHTML debería devolver eso para usted.

Según MDN, outerHTML se apoya en Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox Mobile 11, IE Mobile, Opera Mobile, y Safari móvil. outerHTML es en la especificación DOM Parsing and Serialization.

La página de MSDN en los outerHTML property notas que se apoya en el IE 5+. enlaces de respuesta de Colin a la página quirksmode W3C, que ofrece una buena comparación de la compatibilidad entre navegadores (por otra DOM cuenta también).

+0

No todos los navegadores admiten esto. –

+0

@ Colin: Sí, buen punto. Por experiencia, parece recordar que tanto IE 6+ como Firefox lo admiten, aunque la página de modo peculiar que vinculó sugiere lo contrario ... – Noldorin

+0

Firefox no es compatible con OuterHTML. Es propiedad de IE. https://developer.mozilla.org/En/Migrate_apps_from_Internet_Explorer_to_Mozilla#Generate_and_manipulate_content –

5
document.documentElement.outerHTML 
+1

No todos los navegadores admiten esto. –

+2

Compatible con Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox Mobile 11, IE Mobile, Opera Mobile y Safari Mobile ([MDN] (https://developer.mozilla.org/es) -US/docs/DOM/element.outerHTML)). 'outerHTML' está en la especificación [DOM Parsing and Serialization] (http://domparsing.spec.whatwg.org/#outerhtml). – XP1

+0

La respuesta de Colin es más detallada. –

3
document.documentElement.innerHTML 
+0

Esto no devuelve la etiqueta ''. –

-4

La forma correcta es en realidad:

webBrowser1.DocumentText

+2

Solo si aloja la página en un control WinForms WebBrowser ... –

1

siempre uso

document.getElementsByTagName('html')[0].innerHTML 

Probablemente no es el camino correcto pero puedo entender que cuando la veo.

+0

Esto es incorrecto porque no devolverá la etiqueta ''. –

9

También puede hacer:

document.getElementsByTagName('html')[0].innerHTML 

Usted no recibirá la Doctype o etiqueta html, pero todo lo demás ...

4

probablemente sólo IE:

>  webBrowser1.DocumentText 

para FF hasta desde 1.0:

//serialize current DOM-Tree incl. changes/edits to ss-variable 
var ns = new XMLSerializer(); 
var ss= ns.serializeToString(document); 
alert(ss.substr(0,300)); 

pueden funcionar en FF. (Muestra los MUY PRIMEROS 300 caracteres del MISMO comienzo del texto fuente, principalmente doctype-defs.)

PERO tenga en cuenta que el diálogo "Guardar como" normal de FF NO PODRÍA guardar el estado actual del página, más bien el origen original X/h/tml-source-text !! (un POST-up de ss a algunos temp-file y redireccionar a eso podría entregar un texto fuente guardable CON los cambios/ediciones anteriores realizados en él)

Aunque FF sorprende por una buena recuperación en "atrás" y una inclusión NICE de estados/valores en "Guardar (como) ..."para los campos de entrada similar, área de texto etc., no en elementos en contenteditable/designMode ...

si no un resp xhtml-. Xml-archivo (tipo MIME, no sólo nombre de archivo de extensión!), uno puede usar document.open/write/close para ESTABLECER el contenido del appr en la capa fuente, que se guardará en el diálogo de guardar del usuario desde el menú Archivo/Guardar de FF. ver: http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite respectivamente

https://developer.mozilla.org/en-US/docs/Web/API/document.write

neutral a las preguntas de X (ht) ML, trate de un "punto de vista de fuente: http: // ..." como el valor de la sRC-attrib de un (hecha con scripts !?) iframe, - para acceder a un documento de iframes en FF:

<iframe-elementnode>.contentDocument, consulte google "mdn contentDocument" para ver el documento. miembros, como 'textContent', por ejemplo. 'Lo tengo hace años y no me gusta gatear por él. Si todavía tiene una necesidad urgente, mencionar esto, que tengo que bucear en ...

26

He intentado varias respuestas para ver qué se devuelve. Estoy usando la última versión de Chrome.

La sugerencia document.documentElement.innerHTML; regresaron <head> ... </body>

sugerencia de Gaby document.getElementsByTagName('html')[0].innerHTML; devuelve el mismo.

La sugerencia document.documentElement.outerHTML; regresaron <html><head> ... </body></html> que es todo, aparte de la 'DOCTYPE'.

Puede recuperar el objeto de tipo de documento con document.doctype; Esto devuelve un objeto, no una cadena, por lo que si usted necesita para extraer los datos como cadenas para todos los doctypes hasta e incluyendo HTML 5 se describe aquí: Get DocType of an HTML as string with Javascript

I Sólo quería HTML5, por lo que el siguiente era suficiente para mí para crear todo el documento:

alert('<!DOCTYPE HTML>' + '\n' + document.documentElement.outerHTML);

+0

Esta es la respuesta más completa y debe ser aceptada. A partir de 2016, la compatibilidad del navegador está completa y ya no es necesario mencionarlo en detalle (como en la respuesta actualmente aceptada). –

0

uso document.documentElement.

Igual pregunta respondida aquí: https://stackoverflow.com/a/7289396/2164160

+0

Esa pregunta debería cerrarse como casi un duplicado de esta, que es mucho más antigua. De todos modos, la parte interesante es que necesita '.outerHTML' y para obtener' document.doctype', y la respuesta más completa es [Paolo's] (http://stackoverflow.com/a/26905999/1269037). –

25

Usted puede hacer

new XMLSerializer().serializeToString(document) 

en los navegadores más recientes que IE 9.

+2

Esta fue la * primera * ** respuesta correcta ** de acuerdo con las marcas de fecha y hora. Partes de la página, como la declaración XML, * no * estarán incluidas y los navegadores manipularán el código cuando usen las otras "respuestas". Esta es la * única * publicación que debe votarse al alza (las dos se publican tres días después). La gente necesita prestar atención! – John

+1

Esto no es del todo correcto ya que serializeToString realiza una codificación HTML. Por ejemplo, si su código contiene estilos que definen fuentes como "Times New Roman", Times, las comillas serán codificadas en html. Tal vez eso no es importante para algunos de ustedes, pero para mí es ... – Marko

+0

@John, el OP en realidad pide "todo el HTML _within_ las etiquetas html". Y la mejor respuesta seleccionada por Colin Burnett logra esto. Esta respuesta particular (Erik's) incluirá las etiquetas html y el doctype. Dicho esto, esto fue totalmente un diamante en bruto para mí y exactamente lo que estaba buscando! Tu comentario también ayudó porque me hizo pasar más tiempo con esta respuesta, así que gracias :) – evanrmurphy

Cuestiones relacionadas