Кто-то может исправить меня, если я ошибаюсь, но проверка для HTML документа передается в браузер. Все, что вы делаете с DOM после его анализа и загрузки, на самом деле не подлежит проверке. Кроме того, нет никакой гарантии, что дамп DOM в одном W3C-совместимом браузере будет идентичен тому же дампу в другом браузере. Вот почему, если вы проверите innerHTML
в более старых версиях IE, вы увидите там неподтвержденные данные, например <TD COLSPAN=3>
; этот материал, очевидно, недопустим в стандарте W3C, но по определению он полностью подходит для IE.
И, к сожалению, если вы вставляете целые куски HTML в браузер через JS, этот материал никогда не будет проверен из-за всего, что ему не хватает (например, <head>
и <html>
).
Одна вещь, которую вы можете сделать (и я смотрел на нашу CMS, в которой есть много сгенерированного пользователем HTML, который часто довольно разбит), - это загрузить текст фрагмента в оболочку XML, например, так: :
<?xml version="1.0"?>
<container>{html_string_to_validate}</container>
И затем загрузить это в анализатор XML (подойдет любой тип). Это не поймает проблемы HTML, но это поймает проблемы вложенности и сущности. Возможно, вам придется потрудиться, чтобы некоторые парсеры могли выводить предупреждения, если они видят пустые теги, такие как <script src="..."></script>
.