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

Я знаю, что по этой причине некоторые люди не одобряют их, но действительно ли это имеет значение? Я думаю, что сила, которую они предоставляют, взаимодействуя с JavaScript и храня и отправляя информацию с и на сервер, перевешивает проблему проверки. Я что-то пропустил? Каковы последствия "недействительного" HTML? И разве пользовательский DTD не разрешит их?

вопрос задан 15.06.2009
Constantine
560 репутация

15 ответов


  • 76 рейтинг

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

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

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

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

    class="document docId.56 permissions.RW"

    ответ дан SpliFF, с репутацией 28490, 15.06.2009
  • 22 рейтинг

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

    Например:

    
    

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

    alert($('#testDiv').data('myData'))
    

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

    $('#testDiv').data('myData', 'new custom data')
    

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

    обновление

    • data-myData может быть преобразован в data-mydata в некоторых браузерах, что касается механизма javascript. Лучше всего держать его строчными.
    ответ дан DrParanoia, с репутацией 221, 23.08.2011
  • 10 рейтинг

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

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

    ответ дан Alohci, с репутацией 56870, 15.06.2009
  • 8 рейтинг

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

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

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

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

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

    ответ дан Ionuț G. Stan, с репутацией 128253, 15.06.2009
  • 7 рейтинг

    Вместо использования пользовательских атрибутов вы можете связать свои элементы HTML с атрибутами, используя JSON:

    var customAttributes = { 'Id1': { 'custAttrib1': '', ... }, ... };
    

    А что касается последствий, см. Ответ SpliFF .

    ответ дан Kirtan, с репутацией 16903, 15.06.2009
  • 5 рейтинг

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

    
    

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

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

    
    

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

    ответ дан Randall Tomes, с репутацией 75, 18.10.2010
  • 2 рейтинг

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

    Просто лучше выбрать перспективную альтернативу. Если они не существуют ( они делают в данном конкретном случае ), то путь состоит в том, чтобы изобрести альтернативу, которая будет доказана в будущем.

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

    ответ дан Vinko Vrsalovic, с репутацией 199051, 15.06.2009
  • 2 рейтинг

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

    ответ дан Laurens, с репутацией 21, 6.01.2011
  • 2 рейтинг

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

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

    ответ дан Nenotlep, с репутацией 8693, 9.10.2012
  • 1 рейтинг

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

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

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

    ответ дан alex, с репутацией 331547, 15.06.2009
  • 0 рейтинг

    Валидация

    Вам не нужны пользовательские атрибуты для проверки. Лучшим подходом было бы добавить проверку на основе полей фактической задачи.

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

    • date (Даты)
    • zip (почтовый индекс)
    • area (области)
    • ssn (номер социального страхования)

    Пример разметки:

    
    

    Пример javascript (с jQuery):

    $('.date').validate(); // use your custom function/framework etc here.
    

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

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

    
    
    
    if($('#password').val() != $('#password-confirm').val())
    {
     // do something if the passwords don't match
    }
    

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

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

    Отправка информации «от и до сервера»

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

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

    ответ дан Jonas Stensved, с репутацией 7468, 9.08.2011
  • 0 рейтинг

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

    ответ дан Graham Clark, с репутацией 11120, 15.06.2009
  • 0 рейтинг

    Jquery. html (разметка) не работает, если разметка недопустима.

    ответ дан abhishek, с репутацией 898, 14.09.2010
  • 0 рейтинг

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

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

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

    ответ дан Thomas Hansen, с репутацией 4373, 15.06.2009
  • 0 рейтинг

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

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

    ответ дан teh_noob, с репутацией 714, 15.06.2009