2009-05-03 2 views
171

Есть ли способ в JS получить весь HTML в тегах html, как строка?Как получить весь документ HTML как строку?

document.documentElement.?? 
+6

Единственный правильный ответ: http://stackoverflow.com/questions/ 817218/how-to-get-the-whole-document-html-as-a-string # answer-35917295 (** прекратить голосование по внутреннему/внешнему HTTML-ответам, они НЕ предоставляют весь источник! **) – John

ответ

233

MS добавил outerHTML и innerHTML свойства некоторое время назад.

Согласно MDN, outerHTML поддерживается в Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox Mobile 11, IE Mobile, Opera Mobile и Safari Mobile. outerHTML находится в спецификации DOM Parsing and Serialization.

См. quirksmode для совместимости с браузерами, которые будут работать для вас. Вся поддержка innerHTML.

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

externalHTML не получает doctype. – CMCDragonkai

+0

работал как шарм! Спасибо! есть ли способ получить размер всех/всех файлов, связанных с документом, включая js и css-файлы? – www139

+0

@CMCDragonkai: Вы можете [получить doctype отдельно] (http://stackoverflow.com/a/10162353/157385) и добавить его в строку разметки. Я не знаю, но это возможно. –

37

Я считаю, что document.documentElement.outerHTML должен вернуть это для вас.

Согласно MDN, outerHTML поддерживается в Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox Mobile 11, IE Mobile, Opera Mobile и Safari Mobile. outerHTML находится в спецификации DOM Parsing and Serialization.

Страница MSDN на outerHTML property отмечает, что поддерживается в IE 5+. Ответ Колина ссылается на страницу Quikksmode W3C, которая предлагает хорошее сравнение совместимости между браузерами (для других функций DOM тоже).

+0

Not все браузеры поддерживают это. –

+0

@Colin: Да, хорошая точка. По опыту, я, похоже, помню, что оба IE 6+ и Firefox поддерживают его, хотя связанная с вами страница quirksmode предлагает иначе ... – Noldorin

+0

Firefox не поддерживает OuterHTML. Это собственность IE. https://developer.mozilla.org/En/Migrate_apps_from_Internet_Explorer_to_Mozilla#Generate_and_manipulate_content –

5
document.documentElement.outerHTML 
+1

Не все браузеры поддерживают это. –

+2

Поддерживается в Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox Mobile 11, IE Mobile, Opera Mobile и Safari Mobile ([MDN] (https://developer.mozilla.org/ru/документы-американские/DOM/element.outerHTML)). 'outerHTML' находится в спецификации [DOM Parsing and Serialization] (http://domparsing.spec.whatwg.org/#outerhtml). – XP1

+0

Ответ Колина более подробно. –

3
document.documentElement.innerHTML 
+0

Это не возвращает тег ''. –

-4

Правильный путь на самом деле:

webBrowser1.DocumentText

+2

Только если вы размещаете страницу в элементе управления WinForms WebBrowser ... –

1

Я всегда использую

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

Возможно не правильный путь, но я могу понять, когда я это вижу.

+0

Это неверно, потому что он не вернет тег ''. –

9

Вы также можете сделать:

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

Вы не получите Doctype или HTML теги, но все остальное ...

4

ВОЗМОЖНО ТОЛЬКО IE:

>  webBrowser1.DocumentText 

для FF вверх от 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)); 

может работать в FF. (Показывает ОЧЕНЬ ПЕРВЫЙ 300 символов из ОЧЕНЬ начала исходного текста, в основном doctype-defs).

НО следует помнить, что нормальное «Сохранить как» -диалог FF МОЖЕТ НЕ сохранять текущее состояние page, а оригинал полностью загруженный X/h/tml-source-text !! (POST-up из ss в некоторый временный файл и перенаправление на него может доставить сохраненный исходный текст с внесенными в него изменениями/изменениями.)

Хотя FF удивляет хорошим восстановлением на «спине» и NICE включение состояний/значений в «Сохранить (как) ..."для ввода типа ПОЛЕЙ, TextArea и т.д., а не на элементах в contenteditable/DesignMode ...

Если НЕ xhtml- соответственно XML-файла (мим-типа, а не только имя файла-расширение!), можно использовать document.open/write/close для установки содержимого appr. на исходный слой, который будет сохранен в пользовательском диалоговом окне сохранения из меню File/Save FF. см.: http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite или

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

Нейтральных вопросы X (HT) ML, попробуйте "вид-источник: HTTP: // ..." в качестве значения SRC-Attrib из апа (скрипт сделал !?) iframe, - для доступа к iframes-документу в FF:

<iframe-elementnode>.contentDocument, см. google "mdn contentDocument" для appr. например, «textContent». «Получил это много лет назад и не хотел лезть на него. Если все еще насущная необходимость, упомянуте об этом, что я добрался до ...

26

Я попробовал различные ответы, чтобы увидеть, что возвращается. Я использую последнюю версию Chrome.

Предложение document.documentElement.innerHTML; вернулся <head> ... </body>

предложение Габи document.getElementsByTagName('html')[0].innerHTML; вернулся тот же.

Предложение document.documentElement.outerHTML;<html><head> ... </body></html> которое является всем, кроме «doctype».

Вы можете получить объект DOCTYPE с document.doctype; Это возвращает объект, а не строка, так что если вам нужно извлечь детали как строки для всех DOCTYPES вплоть до HTML5 описано здесь: Get DocType of an HTML as string with Javascript

I только хотел HTML5, так что следующее было достаточно для меня, чтобы создать весь документ:

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

+0

Это самый полный ответ и его следует принять. По состоянию на 2016 год совместимость браузеров завершена, и подробное упоминание о нем (как и в принятом в настоящее время ответе) больше не требуется. –

0

Использование document.documentElement.

тот же вопрос ответил здесь: https://stackoverflow.com/a/7289396/2164160

+0

Этот вопрос должен быть закрыт как почти дубликат этого, который намного старше. В любом случае, интересная часть состоит в том, что вам нужен '.outerHTML' и получить' document.doctype', а наиболее полным ответом является [Paolo's] (http://stackoverflow.com/a/26905999/1269037). –

25

Вы можете сделать

new XMLSerializer().serializeToString(document) 

в браузерах новее, чем IE 9.

+2

Это был * первый * ** правильный ответ ** в соответствии с датами/отметками времени. Части страницы, такие как объявление XML, будут * не * включены, а браузеры будут манипулировать кодом при использовании других «ответов». Это сообщение * только *, которое должно быть проголосовано (досье отправлено три дня спустя). Люди должны обратить внимание! – John

+1

Это не совсем правильно, так как serializeToString выполняет кодировку HTML. Например, если ваш код содержит стили, определяющие шрифты, такие как «Times New Roman», Times, serif, кавычки получат html-кодировку. Возможно, это не важно для некоторых из вас, но для меня это ... – Marko

+0

@ Джона хорошо, что OP фактически запрашивает «весь HTML _within_html-теги». И выбранный лучший ответ Колина Бернетта действительно достигает этого. Этот конкретный ответ (Erik's) будет включать теги html и doctype. Тем не менее, это был настоящий бриллиант в грубой для меня и именно то, что я искал! Ваш комментарий тоже помог, потому что он заставлял меня тратить больше времени на этот ответ, так что спасибо :) – evanrmurphy

Смежные вопросы