我应该使用“name”还是“id”制作 HTML 锚点?

新手上路,请多包涵

当一个人想用“ http://example.com/#foo ”方法引用网页的某些部分时,应该使用

<h1><a name="foo"/>Foo Title</h1>

或者

<h1 id="foo">Foo Title</h1>

它们都有效,但它们是相等的,还是有语义差异?

原文由 Henrik Paul 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 836
2 个回答

根据 HTML 5 规范, 5.9.8 导航到片段标识符

对于 HTML 文档(和 text/html MIME 类型),必须遵循以下处理模型来确定文档的指示部分是什么。

  1. 解析 URL,让 fragid 成为 URL 的 组件。
  2. 如果 fragid 是空字符串,则文档的指示部分是文档的顶部。
  3. 如果 DOM 中有一个 ID 正好等于 fragid 的元素,那么树序中的第一个这样的元素就是文档的指定部分;在这里停止算法。
  4. 如果 DOM 中有一个 a 元素的 name 属性的值恰好等于 fragid,那么树顺序中的第一个这样的元素就是文档的指定部分;在这里停止算法。
  5. 否则,没有文档的指示部分。

所以,它会寻找 id="foo" ,然后会找到 name="foo"

编辑:正如@hsivonen 所指出的,在 HTML5 中 a 元素没有名称属性。但是,上述规则仍然适用于其他命名元素。

原文由 Greg 发布,翻译遵循 CC BY-SA 3.0 许可协议

您不应该在用作 <h1><a name="foo"/>Foo Title</h1> 的任何风格的 HTML 中使用 text/html ,因为 text/html 不支持 XML 空元素语法但是, <h1><a name="foo">Foo Title</a></h1> 在 HTML4 中是可以的。它在当前起草的 HTML5 中无效。

<h1 id="foo">Foo Title</h1> 在 HTML4 和 HTML5 中都可以。这在 Netscape 4 中不起作用,但您可能会使用许多在 Netscape 4 中不起作用的其他功能。

原文由 hsivonen 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题