Является ли DOCTYPE релевантным только для разметки или для DOM?

До какого уровня абстракции остается объявление <!DOCTYPE> (и тип содержимого) документа?

Например, если я работаю с XHTML, но хочу использовать элемент, который недоступен в XHTML - легким примером является iframe - было бы плохой практикой, чтобы программно добавить элемент с JavaScript? Или я либо не должен использовать iframe, либо не использовать XHTML?

Валидатор все равно будет проверять документ - поскольку он не выполняет JS - но есть ли что-то теоретически неправильное при модификации DOM, поэтому он больше не соответствует <!DOCTYPE> (и возвращенному типу содержимого), или <!DOCTYPE> относится только к разметке, когда она находится в текстовой форме?

Добавление

Чтобы быть более конкретным, мой вопрос заключается не в том, как <!DOCTYPE> повлияет на JavaScript, так и на то, как будет работать JavaScript, но как он должен влиять на выбор разработчиков в отношении добавления и удаления и изменения элементов программным образом.

Моим примером является то, что клиент как хочет соответствия XHTML, так и редакторов WYSIWYG, что вы делаете с iframe, который часто приходит с редакторами WYSIWYG? Следует ли удалить его из разметки, только до document.appendChild() в JS? Или вы говорите своему клиенту, что им нужно выбирать между двумя - iframe или XHTML?

Ответ 1

Eesh, я вижу вашу мысль. Если у вас есть один из тех клиентов, который считает, что веб-страница не является хорошей, если ее не XHTML, может быть сложно говорить об этом.

Однако стоит попробовать: кажется бессмысленным тратить время на написание JavaScript, чтобы вставлять элементы, которые являются действительными в XHTML, а не просто использовать doctype, который позволяет создавать элементы.

<iframe> все еще разрешен в XHTML 1.0 Transitional, хотя, не так ли? Это вариант?

Ответ 2

Определение DOCTYPE в стандартном выражении описывает разметку. Таким образом, когда разметка была проанализирована пользовательским агентом, DOCTYPE в этом отношении не имеет значения. С практической точки зрения DOCTYPE также запускает поведение браузера, поэтому то, что вы делаете с DOM динамически, таким образом влияет на DOCTYPE.

Ответ 3

Я никоим образом не являюсь фанатом правил или стандартов, но вставка HTML-элементов в doctype, который не поддерживает этот элемент, является глупым, потому что это может привести к тонким проблемам по пути, который невозможно отладить.

Итак: Вероятно, это сработает и не будет проблемой. (Ваш босс или клиент никогда не узнают, поскольку валидатор может работать только на базовом HTML).

Я по-прежнему не рекомендую это делать.