Так что, если пользовательские атрибуты HTML не являются допустимыми XHTML?
===========================================================================

 что w3c приходит через 2, 5, 10 лет и создает атрибут с тем же именем. Теперь ваша страница не работает.

HTML5 предоставит тип атрибута данных для допустимых пользовательских атрибутов (например, data-myattr = "foo"), так что, возможно, вы могли бы начать использовать это сейчас и быть достаточно защищенными от будущих конфликтов имен.

Наконец, вы можете упустить из виду, что пользовательская логика является рациональным атрибутом класса. Хотя его обычно считают атрибутом стиля, на самом деле это законный способ установки пользовательских мета-свойств для элемента. К сожалению, вы в основном ограничены логическими свойствами, поэтому HTML5 добавляет префикс данных.

Кстати, под "в основном логическим" я имею в виду в принципе. В действительности ничто не мешает вам использовать разделитель в имени класса для определения пользовательских значений, а также атрибутов.

`class="document docId.56 permissions.RW"`



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

Добавление пользовательских атрибутов не повлияет ни на одну из этих проблем сейчас и вряд ли сделает это в будущем, но поскольку они не проверяются, это означает, что когда вы придете к оценке результатов проверки вашей страницы, вам потребуется тщательно выбирайте между вопросами валидации, которые имеют значение, и теми, которые не имеют. Каждый раз, когда вы изменяете свою страницу и проходите повторную проверку, вам необходимо повторить эту операцию. Если ваша страница полностью проверена, вы получите приятное зеленое сообщение PASS и сможете перейти к следующему этапу тестирования или к следующему изменению, которое необходимо внести.



 HTML-элементы с атрибутами, используя JSON:

А что касается последствий, см.[Ответ SpliFF](https://stackoverflow.com/questions/994856/so-what-if-custom-html-attributes-arent-valid-xhtml/994866#994866).



траницу в «режиме причуд», в этом случае некоторые другие части страницы могут отображаться по-разному, а другие вещи, такие как позиционирование, могут немного отличаться. Использование пользовательского DTD может обойти это, однако.



 вы можете легально добавлять пользовательские атрибуты, используя «данные».

Например:

После этого просто используйте последнюю версию jquery, чтобы сделать что-то вроде:

или установить атрибут данных:

А поскольку jQuery работает практически во всех браузерах, у вас не должно возникнуть никаких проблем;)

**Обновить**

наценка является недействительным.



 это зависит от вашего клиента / начальника / и т.д .. они требуют, чтобы он проверял XHTML?

Некоторые люди говорят, что есть много обходных путей - и в зависимости от сценария, они могут отлично работать. Это включает в себя добавление классов, используя`rel` атрибут, и кто-то, кто даже написал свой собственный анализатор для извлечения JSON из комментариев HTML.

HTML5 предоставляет стандартный способ сделать это, добавив к вашим пользовательским атрибутам «data-». В любом случае, я бы порекомендовал сделать это сейчас, так как есть вероятность, что вы можете использовать атрибут, который будет использоваться в дальнейшем в стандартном XHTML.



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

и пусть некоторый простой код jquery сделает работу отсюда. Любой разработчик или веб-дизайнер теперь может работать с рекламным ротатором и изменять его значения, когда это требуется, без лишних слов.

Возвращение к проекту через год или переход к новому, когда предыдущий разработчик разделился и отправился на остров где-то в Тихом океане, может быть адской попыткой выяснить намерения, когда код написан в нечеткой зашифрованной форме, например:

Когда мы пишем код на c # и других языках, мы не пишем код, помещая все пользовательские свойства в одно свойство в виде строки с пробелом, и в конечном итоге приходится анализировать эту строку каждый раз, когда нам нужно получить к ней доступ или выполнить запись. Подумайте о следующем человеке, который будет работать над вашим кодом.



 По моему мнению, поскольку HTML является языком разметки, а не языком программирования, его всегда следует с осторожностью интерпретировать как «ошибки» разметки. Браузер вполне может это сделать. Я не думаю, что это будет и должно измениться когда-либо. Поэтому единственным важным практическим критерием является то, что ваш html будет отображаться корректно большинством браузеров и будет продолжать это делать, скажем, в течение нескольких лет. По истечении этого времени ваш HTML, вероятно, будет в любом случае переработан.



 проверка также важна, когда вам нужно создать контент, который можно / можно обрабатывать с помощью автоматизированных инструментов. Если ваш контент действителен, вы можете намного легче конвертировать разметку из одного формата в другой. Например, правильное выполнение XHTML в XML с определенной схемой намного проще при анализе данных, которые вы знаете и можете проверить на соответствие предсказуемому формату.

Мне, например, НУЖНО, чтобы мой контент был действительным XHTML, потому что очень часто он конвертируется в XML для различных заданий, а затем конвертируется обратно без потери данных или неожиданных результатов рендеринга.



 что разработчики проверяют только для проверки, но есть кое-что, что нужно сказать для факта, что он поддерживает разметку в чистоте. Однако, поскольку каждый браузер (предупреждение преувеличения!) Отображает все по-разному, на самом деле это не стандарт. Мы стараемся следовать стандартам, потому что это заставляет нас чувствовать, что у нас есть какое-то направление. Некоторые люди утверждают, что соблюдение стандарта кода предотвратит проблемы и конфликты в будущем. Мое мнение: винт, что сегодня никто не реализует стандарты правильно и полностью сегодня, все равно может предположить, что весь ваш код в конечном итоге потерпит неудачу. Если это работает, это работает, используйте это, если это не грязно или Вы просто пытаетесь игнорировать стандарты, чтобы придерживаться этого к W3C или кое-чему. , что важно помнить, что стандарты внедряются очень медленно, сильно ли изменилась сеть за 5 лет. Я уверен, что у кого-то будут годы, когда им нужно будет исправить потенциальный конфликт. Нет смысла планировать совместимость стандартов в будущем, когда вы даже не можете полагаться на сегодняшние стандарты.

О, я почти забыл, если твой код не проверяет, 10 маленьких котят умрут. Вы убийца котенка?



 одержимых проверкой, делающих гораздо худшие / странные вещи, чем использование простого пользовательского атрибута:

На мой взгляд, пользовательские атрибуты действительно не имеют значения. Как говорят другие, может быть полезно следить за будущими добавлениями атрибутов в стандарты. Но теперь у нас есть атрибуты data- * в HTML5, поэтому мы сохранены.

Что действительно важно, так это то, что вы правильно вложили теги и правильно указали значения атрибутов.

Я даже использую собственные имена тегов (введенные в HTML5, такие как header, footer и т. Д.), Но у них есть проблемы в IE.

Между прочим, я часто иронично вижу, как все эти фанаты проверки склоняются перед хитрыми хитростями Google, такими как загрузка iframe.



Проверкаы добавить проверку на основе полей фактической задачи.

Назначьте значение с помощью классов. У меня есть имена классов, такие как:

`date` (Даты)`zip` (Индекс)`area` (районы)`ssn` (ИНН)Пример разметки:

Если вам нужны специальные валидаторы для определенного сценария, вы просто изобретаете новые классы (или используете[селекторы](https://api.jquery.com/category/selectors/)) для вашего особого случая:

Пример проверки соответствия двух паролей:

(Этот подход работает без проблем как с проверкой jQuery, так и с инфраструктурой mvc .net и, возможно, с другими)

Бонус: Вы можете назначить несколько классов, разделенных пробелом class = "ssn custom-one custom-two"

Отправка информации "с и на сервер"Если вам нужно передать данные обратно, используйте`<input type="hidden" />`, Они работают из коробки.

(Убедитесь, что вы не передаете конфиденциальные данные со скрытыми данными, так как они могут быть изменены пользователем практически без усилий)



 то СЕГОДНЯ это может не иметь значения, но вы не можете знать, будет ли это иметь значение завтра (и, согласно закону Мерфи, это БУДЕТ иметь значение завтра).

Просто лучше выбрать перспективную альтернативу. Если они не существуют ([они делают в этом конкретном случае](https://stackoverflow.com/questions/992115/custom-attributes-yay-or-nay)), путь состоит в том, чтобы изобрести альтернативу будущего.

Использование пользовательских атрибутов, вероятно, безвредно, но, тем не менее, зачем выбирать потенциально опасное решение только потому, что вы думаете (вы никогда не можете быть уверены), что оно не принесет вреда ?. Возможно, стоит обсудить это дальше, если альтернатива на будущее окажется слишком дорогой или громоздкой, но это, безусловно, не тот случай.



 вы не представляете, что может случиться ни сейчас, ни в будущем. Как уже говорили другие, W3C может начать использовать те же имена в будущем. Но что еще более опасно, так это то, что вы не знаете, что сделали разработчики «browser xxx», когда сталкиваются с ними.

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

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