Можно ли добавлять собственные атрибуты Html?

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

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

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

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

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

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

Дубликат: stackoverflow.com/questions/209428/… и stackoverflow.com/questions/432174/…

Sam Meldrum 13.01.2009 18:04

См. Также stackoverflow.com/questions/432174/…

ChrisW 13.01.2009 17:46
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
22
2
22 316
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Настоятельно рекомендую придерживаться стандартов. Веб уже запутался;)

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

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

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

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

<td class = "isDirty otherclass">

это правда (+1), но с предупреждениями о вреде для здоровья серьезный - создание чего-то class = "somequality 10" совершенно неприемлемо и слишком часто. Лучшая практика: класс - это объектно-ориентированная конструкция, поэтому при ее использовании думайте в терминах объектно-ориентированного программирования.

annakata 13.01.2009 17:29

Это не ответ на общий вопрос, а ответ на конкретный пример.

AnthonyWJones 13.01.2009 17:32

конечно, но есть ответственность за общий случай SO в пользу последующих читателей

annakata 13.01.2009 17:35

+1 к использованию класса. Иногда я использую класс для хранения информации о «статусе», потому что он дает мне возможность стилизовать CSS, а также является ориентиром для javascript. HTML5 действительно предлагает атрибут data, на который стоит обратить внимание, но он по-прежнему делает недействительными страницы, отличные от HTML5.

roborourke 13.01.2009 17:37

Мне нравится использовать этот класс, но я чувствую, что атрибут class - это свалка для всего. Что, если в будущем я создам класс стиля css с именем isDirty? Каковы недостатки, если я просто добавлю настраиваемый атрибут?

Donny V. 13.01.2009 17:46

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

Peter Štibraný 13.01.2009 17:49

@Anthony: Возможно, было бы полезно ответить на общий вопрос, если кто-то другой с похожей (но не совсем такой) проблемой найдет этот вопрос в надежде на руководство.

Adam Bellaire 13.01.2009 19:48

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

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

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

Daniel Schaffer 13.01.2009 17:33

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

EndangeredMassa 13.01.2009 19:24

@Massa: Я не согласен. Классы нужны для того, чтобы сказать, что за экземпляр представляет собой объект. <div class = "employee"> более правильный, чем <div class = "blueText">, и, следовательно, вы можете утверждать, что правильное назначение класса больше связано с добавлением метаданных к объекту, чем с его стилизацией!

Ola Tuvesson 14.01.2009 19:15

Полагаю, ты прав. Если рассматривать HTML как таковой, то атрибут class просто описывает тип элемента. В этом случае имеет смысл добавить типы, не имеющие стилей css. Однако, если вы хотите добавить значение к элементу, я не думаю, что классы правильные.

EndangeredMassa 18.01.2009 03:08

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

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

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

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

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

Daniel Schaffer 13.01.2009 17:37

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

Peter Štibraný 13.01.2009 17:46

@ Дэниел: такие техники не просто выполняются с отношением «Maverick, черт возьми». Когда в команде устанавливаешь 1) что это нормально и 2) последовательный подход к этому. Например, я использую его в TR для rowID. Это становится понятным подходом в команде

AnthonyWJones 13.01.2009 18:07

@Anthony: Конечно, вся причина наличия стандартов в первую очередь в том, чтобы каждый мог согласиться, чего придерживаться !? Придерживаться стандартов ради соблюдения стандартов - действительно хорошая причина для этого!

Ola Tuvesson 14.01.2009 19:11

Ух ты; такой опасный совет от пользователя 76,5к; (

Lightness Races in Orbit 11.10.2011 19:33

@Tomalak: Учитывая, что это довольно старый вопрос, не могли бы вы подробнее рассказать о том, что «опасно» в совете? Я могу быть чем-то неортодоксальным и часто выступаю против новичков. За 30 лет вам уже надоело кучу ерунды, которая мешает просто сделать работу.

AnthonyWJones 11.10.2011 19:40

@AnthonyWJones: Ваше первое предложение делает это очевидным: P Однако лично я не обнаружил, что соблюдение стандартов мешает чему-либо, если только вы не делаете это неправильно. И сделать это стоит безусловно как для немедленных выгод, так и потому, что это значительно упростит всем пользоваться преимуществами вместе в будущем, если мы договоримся о едином «месте встречи» для технологий.

Lightness Races in Orbit 11.10.2011 19:44

@Tomalak: Думаю, я слишком долго в зубах и измучен, чтобы поверить, что это когда-нибудь будет достигнуто. Я считаю, что сделайте то, что нужно ты, как можно лучше с минимальными усилиями. Соблюдение стандартов там, где они на самом деле не приносят вам пользы, - пустая трата времени. Даже большие мальчики не могут прийти к согласию в интерпретации стандартов, не внедряют их полностью, добавляют свои собственные функции, которые не охватываются стандартами. Не поймите меня неправильно. Мне нравятся стандарты, и они могут быть полезными, поэтому придерживаться их там, где они действительно помогают, - это хорошо, но не делайте этого вслепую.

AnthonyWJones 11.10.2011 20:12

@AnthonyWJones: Я еще не такой циничный довольно, но не поймите меня неправильно, я полностью ожидаю, что буду через пять или шесть лет. :)

Lightness Races in Orbit 11.10.2011 20:27
Ответ принят как подходящий

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

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

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

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

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

AnthonyWJones 13.01.2009 17:36

В качестве дополнительного бонуса это подберет атрибуты (HTML5) с именем «data-», поэтому вы можете добавить атрибут на стороне сервера с именем «data-isDirty» вместо «isDirty». Это будет действительный HTML5, и хотя он не будет проверяться в HTML4, он все равно должен работать в кросс-браузере.

Davy8 11.10.2011 19:38

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

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

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

<td custom:isDirty = "true">

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

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

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

document.body.appendChild(element);

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

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

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

Я вижу, что за этот ответ дважды проголосовали "против" и дважды "за". Нет ли объяснений, почему этот ответ работает или нет? Я готов принять мнение людей.

Steve Perks 14.01.2009 19:16

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

NateS 26.08.2010 02:32

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

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

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

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

Другие вопросы по теме