我一直认为指定片段标识符的标准方法是<a name="foo"></a>
。
<a href="#foo">go to foo</a>
<a name="foo"></a> <!-- obsolete method, it seems -->
<p>some content under that anchor with name</p>
但似乎这是旧的方式,新的方法是使用id
,如下所示:
<a href="#bar">go to bar</a>
<p id="bar">some content under that p with id</p>
事实上,W3C验证器表示name
元素已<a>
已过时。那么有两种方法可以跳转到片段标识符,但其中一种已经过时了? (那是什么时候发生的?)
(还有其他关于id
和name
之间差异的问题,但这个问题与片段标识符有关)
答案 0 :(得分:4)
那么有两种方法可以跳转到片段标识符,但其中一种已经过时了吗?
有两种方法可以识别片段。
(还有两种方法可以跳转到一个,因为您可以使用URL或编写一堆JavaScript来滚动页面。)
这是什么时候发生的?
id
是在1996年HTML4问世时推出的。它有效地废除了锚点的name
属性。
name
在2014年的HTML 5中被正式废弃(或者在某些日期使用Living HTML,我不打算弄清楚)。
答案 1 :(得分:1)
是的,有两种方法可以跳转到片段标识符,两者都不会过时(String
元素除外)。
该规则适用于a
以外的所有HTML 5元素(因为a
在HTML5中没有a
属性)。
很快,作为name
元素的片段标识符,标识name
属性已过时,因为该属性自HTML4以来已被删除。
从HTML5 Specification访问a
的流程:
- 如果DOM中有一个元素 一个ID完全等于fragid,然后是树中的第一个这样的元素 订单是文件的指示部分;在这里停止算法。
- 如果DOM中有一个具有name属性的元素 value完全等于fragid,然后是树中的第一个这样的元素 订单是文件的指示部分;在这里停止算法。
- 否则,文档中没有明确的部分。
答案 2 :(得分:1)
回答你的问题:是的,有两种识别片段的方法,一种是过时的。
使用JS的片段标识符,如下所示。
location.replace('#middle');
答案 3 :(得分:0)
执行片段标识符的两种方式都有效。
使用id="fragment"
是在HTML中跳转到片段的新推荐方法。它随HTML4一起推出,基本上无处不在(我只是用IE5验证了这一点)。
<a name="fragment">
,旧的方式,仍然有效,但is obsolete since HTML5。
答案 4 :(得分:0)
有关name
属性的更多信息。
基本上,除了name
元素之外,几乎所有内容都已弃用form
属性(在HTML5中已过时)。表单将它们保留为标识数据的方法,它是name
加上value
属性,该属性被发送回服务器。 (表单元素中的id
用于附加label
元素,与实际数据无关)。
name
属性存在一个根本的弱点,id
属性解决了该弱点:name
属性不需要唯一。对于可以包含多个具有相同name
元素的表单,这是可以的,但不适用于试图唯一标识元素的文档的其余部分。
特别要求id
属性必须唯一,这使其更适合标识链接目标。 CSS非常轻松地将样式应用于具有相同id
的多个元素,但是JavaScript对此要求更为严格。而且,当然,如果不能保证唯一性,就不可能有实用的链接目标。