当人们想用“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>

其他回答

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

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

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

根据定义,整个“命名锚点”概念使用name属性。您应该坚持使用名称,但ID属性对于某些javascript情况可能很方便。

就像在评论中一样,你总是可以用两者来对冲你的赌注。

我有一个由多个垂直堆叠的div容器组成的网页,格式相同,序列号不同。我想在每个div的顶部隐藏名称anchor,因此最经济的解决方案是将anchor作为id包含在打开的div标记中,即,

<div id="[serial number]" class="topic_wrapper">

您不应该在任何类型的HTML中使用<h1><a name=“foo”/>foo-Title</h1>作为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上不起作用的功能。

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

是应该使用的。除非你想要链接,否则不要使用锚点。