他们为什么弃用HTML <a> elements?</a>的'name'属性

时间:2014-09-02 23:17:56

标签: javascript html5 anchor web-standards name-attribute

From what I understand,在HTML5中,我们应该开始使用id属性来引用a元素,而不是name属性。这样做的问题是,还存在id每个文档应该唯一的约束。

现在,我看到很多情况下你想要引用一组相关的a元素(通常在JS中)。通过删除name属性,我们不得不重复使用相同的id,或使用class名称。类应该是关于表示的,所以如果你因为非演示相关的原因引用你的a,这也是一个不完美的解决方案。

我认为另一种HTML5替代方法是使用像data-name这样的东西,但这似乎也是hackish。有什么我想念的吗?是否有秘密的W3阴谋完全逐步淘汰name

编辑:对于那些说“课程不一定需要关于演示”的人,我很难找到具体的资料来源,但我知道我至少阅读了几篇强调这一点的博客/文章。我觉得那些人不是JS程序员......

另外:感谢所有经过深思熟虑,经过深思熟虑的答案!

3 个答案:

答案 0 :(得分:1)

  HTML5中的

我们应该开始使用id属性来引用元素,而不是name属性。

在HTML 4中引入了使用id链接到的内容.XHTML 1弃用了name属性。这是在HTML 5中维护的。

  

问题在于,还存在一个约束,即每个文档的id应该是唯一的。

不明确的链接目标无用!

查看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一起使用只是因为人们经常想要将样式应用于元素组。

答案 1 :(得分:1)

啊,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#adef-class

  

另一方面,class属性为一个元素分配一个或多个类名;该元素可以说属于这些类。类名可以由多个元素实例共享。 class属性在HTML中有几个角色:

     

*作为样式表选择器(当作者希望将样式信息分配给一组元素时)。

     

*用于用户代理的通用处理。

答案 2 :(得分: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>

这样你的数据属性就可以用来绑定事件,决定切换哪些元素。