Comment obtenir le document HTML entier comme une chaîne de caractères?

y a-t-il un moyen dans JS pour obtenir le HTML entier dans les balises html , comme une chaîne de caractères?

document.documentElement.??
183

12 réponses

MS a ajouté les propriétés outerHTML et innerHTML il y a quelque temps.

selon MDN , outerHTML est pris en charge dans Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox Mobile 11, IE Mobile, Opera Mobile, et Safari Mobile. outerHTML est dans la spécification DOM Parsing and Serialization .

Voir quirksmode pour compatibilité du navigateur pour ce qui fonctionnera pour vous. Tous les support innerHTML .

var markup = document.documentElement.innerHTML;
alert(markup);
253
répondu Colin Burnett 2012-12-01 01:54:01

je crois que document.documentElement.outerHTML devrait vous rendre ça.

selon MDN , outerHTML est pris en charge dans Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox Mobile 11, IE Mobile, Opera Mobile, et Safari Mobile. outerHTML est dans la spécification DOM Parsing and Serialization .

La page MSDN sur le outerHTML propriété note qu'il est pris en charge dans IE 5+. La réponse de Colin est liée à la page quirksmode du W3C, qui offre une bonne comparaison de la compatibilité entre navigateurs (pour d'autres fonctionnalités DOM aussi).

39
répondu Noldorin 2012-12-01 01:42:51

Vous pouvez le faire

new XMLSerializer().serializeToString(document)

dans les navigateurs plus récents que IE 9.

38
répondu Erik Aigner 2016-03-10 13:01:38

j'ai essayé les différentes réponses pour voir ce qui est retourné. J'utilise la dernière version de Chrome.

La proposition document.documentElement.innerHTML; retourné <head> ... </body>

Gaby suggestion document.getElementsByTagName('html')[0].innerHTML; en retour le même.

La proposition document.documentElement.outerHTML; retourné <html><head> ... </body></html> ce qui est tout sauf "doctype'.

vous pouvez récupérer l'objet doctype avec document.doctype; cela renvoie un objet, pas une chaîne, donc si vous avez besoin d'extraire les détails comme des chaînes pour tous les doctypes jusqu'à et y compris HTML5 il est décrit ici: Get DocType of an HTML as string avec Javascript

je voulais seulement HTML5, donc ce qui suit m'a suffi pour créer tout le document:

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

30
répondu paulo62 2017-05-23 12:26:00

vous pouvez aussi faire:

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

vous n'obtiendrez pas la balise Doctype ou html, mais tout le reste...

9
répondu Hakan 2011-06-16 14:04:01
document.documentElement.outerHTML
5
répondu Brian Campbell 2009-05-03 14:36:27

PROBABLEMENT SEULEMENT IE:

>     webBrowser1.DocumentText

pour les FF en hausse de 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));

peuvent travailler dans des FF. (Affiche les 300 premiers caractères dès le début du texte source, surtout doctype-defs.)

mais sachez que la boîte de dialogue normale "Enregistrer sous"de FF ne peut pas enregistrer L'état actuel de la page, mais plutôt l'original chargé X/h/tml-source-text !! (un POSTE de ss pour certains temp de fichier et de les rediriger à qui pourrait livrez un texte source récupérable avec les modifications / modifications qui y ont été apportées.)

bien que FF surprenne par une bonne récupération sur " back "et une bonne inclusion des États/valeurs sur" Save (as) ..." pour l'entrée-comme des CHAMPS, textarea etc. , pas sur les éléments en mode contenu/ design...

Si ce N'est un xhtml - resp. fichier xml (mime-type, PAS seulement le nom de fichier de l'extension!), on peut utiliser le document.ouvrir/écrire/près de DÉFINIR le rapp. contenu de la source-couche, qui seront enregistrés l'utilisateur enregistrez-boîte de dialogue " Fichier/Enregistrer menu de FF. voir: http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite resp.

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

neutre aux questions de x (ht)ML, essayez une "view-source:http://..."comme la valeur de la src-attrib d'un (script!?) iframe,-pour accéder à un iframes-document en FF:

<iframe-elementnode>.contentDocument , voir google "mdn contentDocument" for apprr. membres, comme "textContent' par exemple. 'Ai que ans et pas comme à ramper. S'il y a encore un besoin urgent, mentionnez ceci, dans lequel je dois plonger ...

4
répondu dos 2014-03-13 03:55:53
document.documentElement.innerHTML
2
répondu cherouvim 2009-05-03 14:37:47

j'utilise toujours

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

probablement pas le bon chemin mais je peux le comprendre quand je le vois.

0
répondu gaby de wilde 2011-03-31 23:43:19

utiliser document.documentElement .

même question répondue ici: https://stackoverflow.com/a/7289396/2164160

0
répondu Veer En 2017-05-23 12:18:03

pour obtenir aussi des choses en dehors du <html>...</html> , le plus important le <!DOCTYPE ...> déclaration, vous pouvez marcher à travers le document.childNodes, transformant chacun en chaîne:

const html = [...document.childNodes]
    .map(node => nodeToString(node))
    .join('\n') // could use '' instead, but whitespace should not matter.

function nodeToString(node) {
    switch (node.nodeType) {
        case node.ELEMENT_NODE:
            return node.outerHTML
        case node.TEXT_NODE:
            // Text nodes should probably never be encountered, but handling them anyway.
            return node.textContent
        case node.COMMENT_NODE:
            return `<!--${node.textContent}-->`
        case node.DOCUMENT_TYPE_NODE:
            return doctypeToString(node)
        default:
            throw new TypeError(`Unexpected node type: ${node.nodeType}`)
    }
}

j'ai publié ce code comme document-outerhtml sur npm.

0
répondu Gerben 2018-07-13 09:28:13

la bonne façon est en fait:

webBrowser1.DocumentText

-7
répondu Damiano 2010-10-29 15:05:31