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

时间:2016-01-27 08:26:58

标签: html fragment-identifier

我一直认为指定片段标识符的标准方法是<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之间差异的问题,但这个问题与片段标识符有关)

5 个答案:

答案 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)

  

回答你的问题:是的,有两种识别片段的方法,一种是过时的。

什么是片段标识符?

  1. text / plain的片段标识符。
  2. URI指的是同一资源中的位置。这种URI以&#34;#&#34;开头。后跟一个锚标识符(称为片段标识符)。
  3. 使用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对此要求更为严格。而且,当然,如果不能保证唯一性,就不可能有实用的链接目标。