Pull to refresh

Интересная задачка для знатоков

Reading time 2 min
Views 849
В процессе написания плагинов для jQuery столкнулся с необходимостью добавлять расширенные атрибуты к некоторым известным тэгам для облегчения передачи параметров плагинам (получается красиво и просто), но так же хочется без проблем проходить валидацию страницы. Небольшой эксперимент поставил перед выбором: или валидный html или расширенные атрибуты…

Для нормальной валидации html было решено описать расширенные атрибуты в описании документа:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
[
  <!ATTLIST input
    lookup:url CDATA #IMPLIED
    lookup:targets CDATA #IMPLIED
  >
]>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>test</title>
  </head>
  <body>
    <input type="text" maxlength="50" size="20" class="lookup" name="l1"
      lookup:url="/find.aspx?q="
      lookup:targets="id:MyHidden1, id:MySpan1.text, text:MySpan2.text"/>
  </body>
</html>



Этот html прекрасно проходит валидацию, идеально подходит для плагина, но! в браузерах (Chrome, IE8, FF3) в начале документа отображаются два символа "]>" и это все портит.

Варианты с внешним файлом dtd и т.п. пробовал — валидация не проходит.

Стоит ли копать дальше или бросить идею с расширенными атрибутами и валидным html? Или может у кого-нибудь появится идея как это можно обойти?

Итог. Спасибо всем за обсуждение, я сознательно не участвовал в процессе. Отдельное спасибо tenshi и SelenIT за толковые ссылки, мне как раз в моих вариантах не хватало шага с импортом DTD.

Итак результат получается такой: пишем свой файл DTD, в нем импортируем нужный DTD
<!-- include XHTML1.1 -->
<!ENTITY % xhtml1t.dtd PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
%xhtml1t.dtd;
<!-- Наши определения -->
<!ATTLIST input
  lookup:url CDATA #IMPLIED
  lookup:targets CDATA #IMPLIED
>

Потом прописываем Doctype на странице
<!DOCTYPE html PUBLIC "-//My//DTD XHTML MyExt//RU" "http://my.site.ru/_static/test.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
...

Валидация проходит, документ выглядит нормально. Однако еще вопрос, как это воспримят браузеры.

Кстати, насчет постоянных споров должен быть документ валиден или нет — лично для меня валидация полезна: использую валидацию для проверки кода страницы и поиска косяков в генерируемом html, а продираться между «лишними» ошибками валидатора сильно не хочется. У многих есть свое устоявшиеся мнение и переубеждать, вступать в полемику по этому вопросу, излишне.
Tags:
Hubs:
+27
Comments 60
Comments Comments 60

Articles