当人们想用“http://example.com/#foo“方法,应该使用
<h1><a name="foo"/>Foo Title</h1>
or
<h1 id="foo">Foo Title</h1>
它们都有效,但它们是相等的,还是有语义差异?
当人们想用“http://example.com/#foo“方法,应该使用
<h1><a name="foo"/>Foo Title</h1>
or
<h1 id="foo">Foo Title</h1>
它们都有效,但它们是相等的,还是有语义差异?
当前回答
注意JavaScript用户:所有ID都成为窗口下的全局变量。
<h1 id="foo">Foo Title</h1>
刚刚创建了JS全局:
window.foo
window.foo的值将是h1的HTMLElement。
除非您能保证id属性中使用的所有值都是安全的,否则您可能更喜欢使用名称:
<h1 name="foo">Foo Title</h1>
其他回答
根据HTML 5规范5.9.8导航到片段标识符:
对于HTML文档(以及text/HTML MIME类型),必须遵循以下处理模型来确定文档的指定部分是什么。解析URL,让fragid成为URL的<fragment>组件。如果fragid是空字符串,那么文档的指示部分就是文档的顶部。如果DOM中有一个元素的ID正好等于fragid,那么树顺序中的第一个这样的元素就是文档的指定部分;在这里停止算法。如果DOM中有一个元素的name属性的值正好等于fragid,那么树顺序中的第一个这样的元素就是文档的指定部分;在这里停止算法。否则,文件中没有指明的部分。
因此,它将查找id=“foo”,然后将跟随name=“foo“
编辑:正如@hsiwonen所指出的,在HTML5中,a元素没有name属性。然而,上述规则仍然适用于其他命名元素。
只是对标记的观察HTML早期版本中的标记表单提供了一个锚点。HTML5中使用id属性的标记表单虽然基本上是等价的,但需要一个元素来标识,几乎所有这些元素通常都包含内容。
例如,可以使用空span或div,但这种用法看起来和味道都很糟糕。
一种想法是为此使用wbr元素。wbr有一个空的内容模型,并简单地声明换行是可能的;这仍然是对标记标记的一种略微不必要的使用,但比不必要的文档分割或空文本跨度要少得多。
没有语义差异;标准的趋势是使用id而不是名称。然而,在某些情况下,有些差异可能会导致人们更喜欢名字。HTML 4.01规范提供了以下提示:
使用id或名称?作者在决定是否使用id或名称作为锚点名称时应考虑以下问题:
id属性可以不仅仅用作锚点名称(例如,样式表选择器、处理标识符等)。一些较旧的用户代理不支持使用id属性创建的锚点。name属性允许更丰富的锚点名称(带有实体)。
在html5中,id=“”属性定义了元素的唯一标识符,它也是片段链接的锚点。在以前的html标准中,<a>元素的name=“”属性定义片段链接的锚点。我建议使用以下内容:<a name=“foo”id=“foo“></a><h1>foo Title</h1>因为对id=“”属性的支持有点不稳定(尽管所有主要浏览器的最新版本都支持它,但不超过几年的版本[如果没有充分的理由,最好不要破坏])。它是兼容的,它不会对link'd元素中的任何内容进行样式设置,因为闭包</a>仍然在元素之外,但在所有当前标准中仍然有效。
确保<a>元素的name=“”和id=“”属性相同。
<h1 id="foo">Foo Title</h1>
是应该使用的。除非你想要链接,否则不要使用锚点。