2014-09-02 2 views
1

From what I understand, в HTML5 мы должны начать использовать атрибут id для ссылки на элементы a, вместо атрибута name. Проблема заключается в том, что существует также ограничение, что id должно быть уникальным для каждого документа.Почему они не признают атрибут 'name' для HTML <a> элементов?

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

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

EDIT: Для тех, кто говорит, что «классы не обязательно должны быть о представлении», у меня возникают проблемы с поиском определенного источника, но я знаю, что прочитал хотя бы пару блогов/статей, где это было подчеркнуты. У меня такое чувство, что эти люди не были программистами JS ...

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

+0

Это всего лишь атрибут, поэтому все остальное, что может стоять за ним и не должно быть уникальным, кажется для меня справедливой игрой. Классы или атрибуты данных кажутся вполне приемлемыми на мой взгляд. – kinakuta

+0

«Занятия должны быть о представлении»? – guest

ответ

1

Ах, HTML. Как вы непоследовательны.

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

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

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

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

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

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

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

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

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

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

* В качестве селектора таблицы стилей (когда автор хочет присвоить набор информации стилей).

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

+1

Спасибо, что заставило меня прочитать спецификации для класса. Я предполагаю, что часть «Для обработки общего назначения пользовательскими агентами» замалчивается большим количеством разработчиков/разработчиков. – alexw

0

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

К вашим моделям об атрибуте 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> 

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

+0

Интересно, я не понимал, что атрибут 'name' был связан с поведением привязки на странице. – alexw

+0

Правильно, это была оригинальная цель (я полагаю, что другие ответы связаны с цитатами из документации) - и в HTML5 поведение привязки на странице было изменено, чтобы вместо этого использовать атрибут 'id' любого элемента, что намного полезнее ! – nzifnab

1

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

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

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

Неоднозначные целевые ссылки не полезны!

Посмотрите на definition of the name attribute for the a element in HTML 3.2:

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

осуждающей его в пользу id не добавляет новые ограничение единственности.

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

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

Классы должны быть якобы о представлении

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

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

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

См. Также the HTML 5 definition of the class attribute, в котором не упоминается, что он строго предназначен для презентации, и один из примеров использования с JavaScript.

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