为什么浏览器在更改哈希时会跳转到ID?

时间:2012-11-02 09:51:22

标签: javascript anchor hashtag

假设我有以下标记:

<div id ="About" style="height: 2000px">
    About
</div>
<div id="Work" style="height: 2000px">
    Work
</div>

当我运行location.hash = 'Work';时,浏览器会直接跳到“Work”元素的位置。我期待带有name属性的锚标记的行为。但在我们的例子中,它是一个带有ID的div容器。我在IE8 / 9和Chrome中进行了测试。

为什么浏览器会在更改哈希值时跳转到div容器?

为方便起见,我打开jsFiddle

2 个答案:

答案 0 :(得分:2)

这不仅仅是具有名称属性的锚点,任何带有ID的东西都可以跳转到使用location.hash或只是URL中的#Work。

例如,点击here会转到此页面中的ID #show-editor-button

答案 1 :(得分:1)

这是一个功能。它的设计是这样的,你可以在rfc2854中阅读它。让我为你引用它:

  

片段标识符

     

URI规范[URI]注意到片段的语义   标识符(“#”后面的URI的一部分)是数据
的属性   检索动作产生的,格式和   片段标识符的解释取决于媒体类型   检索结果。

     

对于标记为text / html的文档,片段标识符为   指定相应命名的元素;任何元素都可以是   以“id”属性命名,以及A,APPLET,FRAME,IFRAME,IMG和
  MAP元素可以用“name”属性命名。这是描述的   详见[HTML40]第12节。