Предполагается, что вы пытаетесь создать полностью проанализированный объект Document из строки разметки и типа контента, о котором вы также знаете (возможно, потому, что вы получили html из xmlhttprequest и, таким образом, получили тип контента в его Content-Type
http header; вероятно, обычно text/html
) - это должно быть просто:
var doc = (new DOMParser).parseFromString(markup, mime_type);
в идеальном будущем мире, где реализации браузеров DOMParser
столь же сильны и компетентны, как и их рендеринг документов - возможно, это хорошее требование для будущих усилий по стандартам HTML6
. Оказывается, ни один из нынешних браузеров этого не делает.
Возможно, у вас есть более простая (но все еще грязная) проблема с наличием строки html, для которой вы хотите получить полностью разобранный Document
объект. Вот еще один способ сделать это, который также должен работать во всех браузерах - сначала вы создаете объект HTML Document
:
var doc = document.implementation.createHTMLDocument('');
, а затем заполнить его HTML-фрагментом :
doc.open();
doc.write(html);
doc.close();
Теперь у вас должен быть полностью разобранный DOM в doc, который вы можете запустить на alert(doc.title)
, срезать с помощью селекторов css, таких как doc.querySelectorAll('p')
или то же XPath, используя doc.evaluate
.
Это на самом деле работает в современных браузерах WebKit, таких как Chrome и Safari (я только что протестировал в Chrome 22 и Safari 6 соответственно) - вот пример, который берет исходный код текущей страницы, воссоздает его в новой переменной документа src
, считывает его заголовок, переписывает его HTML-цитированной версией того же исходного кода и показывает результат в iframe: http://codepen.io/johan/full/KLIeE
К сожалению, я не думаю, что какие-либо другие современные браузеры имеют столь же надежные реализации.