Является ли неправильной практикой использование нестандартных атрибутов HTML?

Мне очень удобно устанавливать такие атрибуты, как:

<a stackoverflowId="123">...</a>

И в JavaScript:

var soId = $selectofA.attr('stackoverflowId'); //jQuery

Это хорошая практика? У меня еще не было проблемы с этим.

Ответы

Ответ 1

В HTML 5 вы можете сделать это с помощью атрибута data-*:

<a id="myDiv" data-stackoverflowId="123">...</a>

Поскольку вы используете jQuery, вы также можете проверить плагин метаданных jQuery. Это позволит вам хранить и анализировать метаданные JSON в атрибуте class, и ваша разметка все равно будет проверяться.

Вы могли бы вставить свои метаданные следующим образом:

<a class="your_class {stackoverflowId: '123'}">...</a>

И извлеките его следующим образом:

var data = $selectofA.metadata();

Ответ 3

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

Если вы действительно параноик относительно соответствия стандартам, вы можете написать HTML стандартным образом и установить атрибуты в DOM в script. По крайней мере, документ будет проверяться. Но так как чистый результат будет таким же, вы должны быть очень больны, чтобы поддержать этот подход к естественному способу распространения IMO для расширения html по своему усмотрению.

Другой подход заключается в написании пользовательского DTD, который точно определяет, какие расширения вы хотите использовать. Этот подход подробно описан здесь: http://www.alistapart.com/articles/customdtd/

В основном этот подход основан на размещении измененной копии XHTML DTD в каком-либо месте и использовании doctype, который указывает на это настроенное DTD. Вы должны определить дополнительные объявления атрибутов в этом модифицированном DTD, и, видимо, валидатор w3c фактически будет использовать это DTD для проверки.

Однако, я бы не использовал этот подход для обычных интернет-сайтов, когда-либо. Я боюсь, что некоторые браузеры могут зайти так далеко, как пытаться проверить документ против моего dtd, но затем отказаться от ошибки где-то на полпути. Эта обычная технология DTD не очень распространена, я просто не стал бы использовать обычные веб-страницы.

Ответ 4

Если вы используете jQuery (который был вашим примером), вы должны посмотреть на метод данных:

http://api.jquery.com/jQuery.data/