Почему они отказались от атрибута name для HTML-элементов <a>?

Насколько я понимаю, в HTML5 мы должны начать использовать id атрибут для ссылки a элементы, а не name приписывать. Проблема в том, что есть также ограничение, которое id должен быть уникальным для каждого документа.

Теперь я вижу много ситуаций, когда вы хотите сослаться на набор связанных a элементы (в JS, как правило). Избавившись от name атрибут, хотя, мы вынуждены либо использовать то же самое idили используйте class название. Предполагается, что классы должны быть посвящены презентации, поэтому это также несовершенное решение, если вы ссылаетесь на aпо причинам, не связанным с презентацией.

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

РЕДАКТИРОВАТЬ: Для тех, кто говорит "классы не обязательно должны быть о презентации", у меня проблемы с поиском конкретного источника, но я знаю, что я прочитал по крайней мере пару блогов / статей, где это было подчеркнуто. У меня такое чувство, что эти люди не были программистами JS...

ТАКЖЕ: Спасибо за все хорошо объясненные, продуманные ответы!

3 ответа

Решение

Ах, HTML. Как вы противоречивы.

Похоже, проблема заключается в путанице с name атрибут для якорей и тому name атрибут для входов. Еще в дни до HTML5 вам нужен был способ отличить исходящую ссылку (через href) с внутренней ссылкой на документ (# закладка).

Итак, как бы они достигли этого? Это указано здесь: http://www.w3.org/TR/html401/struct/links.html

Активируя эти ссылки (щелкая мышью, ввод с клавиатуры, голосовые команды и т. Д.), Пользователи могут посещать эти ресурсы. Обратите внимание, что атрибут href в каждой привязке источника указывает адрес привязки назначения с URI.

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

Якоря-адресаты в документах HTML могут указываться либо элементом A (с именем с атрибутом name), либо любым другим элементом (с именем с атрибутом id).

Да, якорь name атрибут (который действует как идентификатор фрагмента), который мог бы другой якорь link к.

Только с HTML5 они решили любой элемент (кроме a) может выступать в качестве идентификатора фрагмента (что имеет смысл - должен быть только один фрагмент, на который вы можете ссылаться...) name приписывать.

Что касается того, как их выбрать? class Атрибут отлично подходит (конечно, он используется для стилизации, но делает ли он его чисто презентационным?)

Другая цитата (из w3c: http://www.w3.org/TR/html401/struct/global.html)

Атрибут class, с другой стороны, присваивает элементу одно или несколько имен классов; можно сказать, что элемент принадлежит к этим классам. Имя класса может совместно использоваться несколькими экземплярами элемента. Атрибут class имеет несколько ролей в HTML:

* Как селектор таблиц стилей (когда автор желает назначить информацию о стиле набору элементов).

* Для обработки общего назначения пользовательскими агентами.

в HTML5 мы должны начать использовать атрибут id для ссылки на элементы вместо атрибута name.

Использование id ссылки на которые были введены в HTML 4. XHTML 1 устарел name приписывать. Это было сохранено в HTML 5.

Проблема в том, что существует также ограничение, что идентификатор должен быть уникальным для каждого документа.

Цели с неоднозначной ссылкой бесполезны!

Посмотрите на определение name атрибут для a элемент в HTML 3.2:

Это должна быть строка, определяющая уникальное имя для области действия текущего HTML-документа

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

Теперь я вижу много ситуаций, когда вы хотите сослаться на набор связанных a элементы (в JS, как правило).

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

Занятия должны быть о презентации

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

Посмотрите на определение класса в словаре:

Набор или категория вещей, которые имеют какое-то общее свойство или атрибут и отличаются от других по виду, типу или качеству

См. Также определение атрибута class в HTML 5, в котором не упоминается, что он предназначен исключительно для представления, и один из примеров использования - это JavaScript.

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

Я не вижу причин, чтобы не использовать классы или атрибуты данных.

На ваш счет о name атрибут - они должны быть уникальными в любом случае! множественный a элементы с одинаковыми именами не очень полезны, так как ссылки на них в URL станут неоднозначными: www.example.com#my-named-element,

В нашей компании мы исследовали, используя data-behaviors атрибут так:

<a href='#' data-behaviors='something-cool something-else'>Click Me</a>

И в JS мы привязываем события к нему, используя:

$(".container").on("click", "data-behaviors=~'something-cool'", function(e){
  e.preventDefault();
})

Мы также исследовали использование классов с соглашением об именах .js-something-cool так что нас не смущает, какие классы предназначены для CSS, а какие специфичны для функциональности javascript.

В итоге мы предпочли js- Схема имени класса, потому что это менее неудобно в использовании, чем data-behavior версия. Но иногда мы будем смешивать и сочетать в зависимости от наших потребностей.

Например, вы можете сделать функцию переключения следующим образом:

<a href='#' data-toggle='#opened-div'>Click Me</a>

<div id='opened-div'>Some stuff</div>

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

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