Можно ли добавлять пользовательские атрибуты HTML? - PullRequest
22 голосов
/ 13 января 2009

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

<tr>
  <td isDirty="true">
     ....row data
  <td>
</tr>

Это прекрасно работает с jQuery и не добавляет большого количества кода на мою страницу.

Но действительно ли это правильный способ сделать что-то подобное и каковы недостатки?

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

<tr>
  <td>
     ....row data
     <input id="isDirty" type="hidden" value="true" />
  <td>
</tr>

Ответы [ 11 ]

26 голосов
/ 13 января 2009

Почему вы не используете возможность данных jQuery?

Ваш пример будет (я не знаю условия для выбора правильного тд):

$("tr td").data("isDirty", true);

взгляните на документацию

21 голосов
/ 13 января 2009

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

<td class="isDirty otherclass">
9 голосов
/ 13 января 2009

HTML 5 поддерживает пользовательские атрибуты с префиксом «data-». Таким образом, я бы использовал это для прямой совместимости.

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

2 голосов
/ 13 января 2009

Придерживаться стандартов ради соблюдения стандартов - плохая причина придерживаться стандартов.

На вашей странице указан DTD, на сервере указан тип mime. Пока вы не отправляете настоящий xhtml, нет никаких причин не использовать атрибуты expando таким образом. Это может быть очень полезно.

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

Только не поддавайтесь соблазнительному методу IE Elem.isDirty для доступа к таким значениям. Всегда используйте elem.getAttribute ('isDirty') для доступа к значению.

2 голосов
/ 13 января 2009

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

Возможно, вы сможете сделать это с вашим собственным DTD или схемой, но это больше работы.

Ваш второй пример - верный способ сделать это, я думаю. В любом случае, правильное направление.

0 голосов
/ 07 февраля 2013

Несколько лет назад я использовал пользовательские атрибуты, и они работают. Делая то же самое в соответствии со стандартом html 5, вы избежите будущих проблем, потому что прошлых проблем не существует. Будущие проблемы могут возникнуть с мобильными устройствами и другими устройствами, отличными от компьютера, но, поскольку они будут частью ближайшего будущего, придерживайтесь пользовательских атрибутов html 5, если вы хотите их использовать. Мой новый случай прост: я использую хорошо закодированные теги с простыми данными между ними (переменные данные), которые я получаю через nodeValue имея свой элемент ... this.firstChild.nodeValue и ключ должен сделать так, чтобы использованный тег не отображался ни по стилю как ты это понял? getelementbyID, по тэгу, по имени, по выбору класса. преимущества Нет необходимости кодировать объекты декодирования и т. Д., Нет необходимости jquery

0 голосов
/ 14 января 2009

Добавление произвольных атрибутов будет означать, что ваш HTML больше не действителен.

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

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

0 голосов
/ 13 января 2009

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

Вы не должны устанавливать свои собственные атрибуты, если не хотите поддерживать свое собственное DTD.

0 голосов
/ 13 января 2009

Использование пользовательского атрибута полезно с нескольких точек зрения, но обязательно избегайте коллизий пространства имен, используя префикс:

<td custom:isDirty="true">

В противном случае это может привести к конфликту с будущими реализациями.

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

var element = document.createElement('div');
element.myCustomObject = { foo: "bar", someFunction: function () { alert('foobar'); }};

document.body.appendChild(element);

Конечно, вышесказанное не имеет смысла для людей, которые никогда не создавали скрипты на стороне клиента без таких каркасов, как jQuery, prototype и т. Д ...:)

0 голосов
/ 13 января 2009

Я считаю, что нет ответа «Да» или «Нет» на ваш вопрос. Использование пользовательских атрибутов поможет вам иметь более чистый и короткий код при многих обстоятельствах. Ваш пример тривиален, и я считаю, что он не может продемонстрировать силу и гибкость этой техники. В частности, вы имеете дело с логическим атрибутом, который, скорее всего, связан с внешним видом. С такими вещами лучше обращаться с классом. Однако с помощью пользовательских атрибутов вы можете добавить контекст к своим узлам. Вы можете использовать этот контекст, чтобы сделать некоторые вычисления. Например, добавьте цену или атрибут веса к узлам списка. Затем вы позже будете использовать эти поля для расчета суммы или среднего значения. Я уверен, что есть много лучших примеров, чем этот.

С другой стороны, пользовательские атрибуты не позволят html пройти проверочное тестирование. Это важная проблема, и она может стать еще более важной в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...