当人们想用“http://example.com/#foo“方法,应该使用

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

or

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

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


当前回答

我不得不说,如果你要链接到页面中的那个区域。。。例如page.html#foo和foo Title不是您应该使用的链接:

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

如果你在标题周围加上一个<a>引用,你的标题将受到站点中特定的<a>CSS的影响。这只是额外的标记,你不应该需要它。我强烈建议在标题上放置一个id,它不仅格式更好,而且可以让你用Javascript或CSS来处理这个对象。

其他回答

第二个示例为所讨论的元素分配一个唯一的ID。然后可以使用DHTML操纵或访问该元素。

另一方面,第一个方法在文档中设置一个命名位置,类似于书签。连接到一个“锚”,这是完全合理的。

ID方法在较旧的浏览器上不起作用,锚定名称方法在较新的HTML版本中将被弃用。。。我会和id一起去。

<h1 id="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属性。然而,上述规则仍然适用于其他命名元素。

注意JavaScript用户:所有ID都成为窗口下的全局变量。

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

刚刚创建了JS全局:

window.foo

window.foo的值将是h1的HTMLElement。

除非您能保证id属性中使用的所有值都是安全的,否则您可能更喜欢使用名称:

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