HTML中有两种方式可以跳转到片段标识符吗?

9

我一直认为指定片段标识符的标准方式是通过<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>元素中已经过时。那么有两种跳转到片段标识符的方式,但其中一种已经过时了吗?(这是什么时候发生的?)
(还有其他关于idname之间区别的问题,但这个问题是关于片段标识符的)

重复问题:https://dev59.com/uXM_5IYBdhLWcg3wZSI6 https://dev59.com/5m855IYBdhLWcg3wMBLV https://dev59.com/ZGs05IYBdhLWcg3wD90B - kebs
5个回答

7
有两种方法来标识一个片段。
(也有两种方法可以跳转到其中一个,因为你可以使用URL或编写一堆JavaScript来滚动页面。)
“id”在HTML 4发布时于1996年被引入,它有效地使锚点的“name”属性过时了。
在2014年的HTML 5中正式废弃了“name”(或在某个我不想试图找出的日期的Living HTML中)。

2

有两种方法可以跳转到片段标识符,除a元素外,两种方法都不过时。

这适用于所有HTML 5元素,除了a元素(因为在HTML5中,a没有name属性)。

因此,将name属性标识为a元素的片段标识符已经过时,因为该属性从HTML4开始就已经被弃用。

HTML5规范中访问fragment的流程:

  • 如果DOM中有一个ID与fragid完全相等的元素,则树顺序中第一个具有此类元素的元素是文档的指定部分;停止算法执行。
  • 如果DOM中有一个a元素,其名称属性的值恰好等于fragid,则树顺序中第一个具有此类元素的元素是文档的指定部分;停止算法执行。
  • 否则,文档中没有指定的部分。

1

回答您的问题:是的,有两种方法来标识一个片段,其中一种已经过时。

什么是片段标识符?

  1. 文本/纯文本的片段标识符。
  2. URI 引用同一资源中的位置。这种 URI 以 "#" 开头,后跟锚点标识符(称为片段标识符)。

使用 JS 来进行片段标识符如下所示。

location.replace('#middle');

1

两种方式都可以实现片段标识符的跳转。

使用id="fragment"是HTML中新的、推荐的跳转到片段的方式。它是在HTML4中引入的,基本上可以在任何地方使用(我刚刚用IE5验证了这一点)。

<a name="fragment">,旧的方式仍然有效,但因为HTML5已经过时


@太极者无极而生。我碰巧在Win2000虚拟机中有这个,所以我决定试一下。我想它也适用于后来的版本。 - PurkkaKoodari

1

关于name属性的更多信息。

基本上,除了form元素之外,name属性已经被弃用(在HTML5中称为过时)。表单将其保留作为识别数据的方法,发送到服务器的是name加上value属性。(表单元素中的id用于附加label元素,与实际数据无关)。

name属性存在一个根本性的弱点,而id属性则解决了这个问题:不需要唯一的name属性。对于可以有多个具有相同name的元素的表单来说,这是可以接受的,但对于文档的其他部分,您需要唯一地标识一个元素,这是不合适的。

id属性需要保证唯一性,这使得它更适合用于标识链接目标等方面。CSS对具有相同id的多个元素应用样式比较宽松,但JavaScript对此要求更加严格。当然,如果不能保证唯一性,就无法创建实用的链接目标。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接