8

I know it's already discussed here, but there were no solution to get the whole document (including doctype).

$(document).html(); returns null...

2
  • 1
    Why does nobody read the question ("including doctype") before answering ? Commented Jan 31, 2013 at 8:25
  • 2
    Because everybody wants to be the first to get points ;-)
    – dtrunk
    Commented Jan 31, 2013 at 8:35

8 Answers 8

14

This will get you all the HTML:

document.documentElement.outerHTML

Unfortunately it does not return the doctype. But you can use document.doctype to get it and glue the two together.

1
  • 1
    You were the first mentioning document.doctype. So I accepted your answer. Thanks to all!
    – dtrunk
    Commented Jan 31, 2013 at 8:34
8
+50

You can do

new XMLSerializer().serializeToString(document);

for all browsers newer than IE 9

4

try this.

$("html").html()

document is a variable it dose not represent the html tag.

EDIT

To get the doctype one could use

document.doctype
1
  • 2
    I don't think this answers the question : this doesn't include the doctype. Commented Jan 31, 2013 at 8:23
4

This is a function which has support in IE6+, it does't use outerHTML for even more support, it adds the doctype and uses a few tricks to get the html tag and its attributes. In order to receive a string with the doctype, and doesn't use outerHTML so it supports every browser. It uses a few tricks to get the html tag. Add this code:

document.fullHTML = function () {
    var r = document.documentElement.innerHTML, t = document.documentElement.attributes, i = 0, l = '',
        d = '<!DOCTYPE ' + document.doctype.name + (document.doctype.publicId ? ' PUBLIC "' + document.doctype.publicId + '"' : '') + (!document.doctype.publicId && document.doctype.systemId ? ' SYSTEM' : '') + (document.doctype.systemId ? ' "' + document.doctype.systemId + '"' : '') + '>';
    for (; i < t.length; i += 1) l += ' ' + t[i].name + '="' + t[i].value + '"';
    return d+'\n<html' + l + '>' + r + '</html>';
}

Now, you can run this function:

console.log(document.fullHTML());

This will return the HTML and doctype.

I ran this on example.com, here are the results

1
document.documentElement.innerHTML 

will return you all document markup as string

to get the whole doctype read this

1
  • 3
    Close but no cookie:) It doesn't return the doctype. Commented Jan 31, 2013 at 8:26
1

I'm not sure about getting the complete doc.but what you can do is,you can get the content of html tag seprately and doctype seprately.

$('html').html() for content and document.doctype for getting the doctype

0

I don't think there is a direct access to the whole document (including the doctype), but this works :

$.get(document.location, function(html) {
    // use html (which is the complete source code, including the doctype)
});
3
  • 1
    i think it is more efficient to use the document already opened instead of "reloading" it by firing an ajax request...
    – dtrunk
    Commented Jan 31, 2013 at 8:30
  • 1
    @dtrunk yes but nothing else really gives the whole source code including the exact doctype typed (document.doctype is the nearest thing you have but not the exact one). Commented Jan 31, 2013 at 8:33
  • Additionally it can be noted that this usually won't fire a request as the document is cached. Commented Jan 31, 2013 at 8:43
0

I have done it on browser's console

document.documentElement;

2
  • Consider adding more details and the usage of formatted codes
    – mehrdadep
    Commented Feb 23, 2020 at 11:25
  • 1
    Note that document.documentElement returns a Object where document.documentElement.outerHTML returns a String Commented Feb 23, 2020 at 11:31

Not the answer you're looking for? Browse other questions tagged or ask your own question.