Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Url 名称与DIV ID冲突相同的命名锚(A)_Url_Html_Anchor - Fatal编程技术网

Url 名称与DIV ID冲突相同的命名锚(A)

Url 名称与DIV ID冲突相同的命名锚(A),url,html,anchor,Url,Html,Anchor,我在一个网站上工作,该网站使用一个侦听器来显示和隐藏内容div,并滚动到同名的命名锚 我遇到了一个奇怪的问题,它没有滚动到锚,而是滚动到ID与锚名称相同的DIV 一旦我将DIV ID更改为其他内容,行为就如预期的那样 我似乎找不到关于这方面的任何文档,我想知道这是否是有文档记录的行为 有效的代码: <a name="top">top</a> <p id="bottomx" style="height: 1800px;"> <a href="#top"&

我在一个网站上工作,该网站使用一个侦听器来显示和隐藏内容div,并滚动到同名的命名锚

我遇到了一个奇怪的问题,它没有滚动到锚,而是滚动到ID与锚名称相同的DIV

一旦我将DIV ID更改为其他内容,行为就如预期的那样

我似乎找不到关于这方面的任何文档,我想知道这是否是有文档记录的行为

有效的代码:

<a name="top">top</a>

<p id="bottomx" style="height: 1800px;">
<a href="#top">top</a>
<a href="#bottom">bottom</a>
<br>
</p>
<a name="bottom">bottom</a>



底部
在第二个示例中,它将滚动到名为“bottom”的p。同样,如果我在页面底部创建一个ID为“bottom”的DIV,然后点击page.html#bottom,它就会向下滚动到该DIV

只是看起来很困惑。你知道为什么会这样吗?Safari和FF中的行为相同

对于HTML文档(和HTML MIME类型),执行以下处理 必须遵循模型,以确定所示零件的类型 文件是

  • 解析URL,并让fragid作为 网址

  • 如果fragid是空字符串,则 文档是文档的顶部;在这里停止算法

  • 让解码的fragid是扩展任意序列的结果 fragid中有效UTF-8序列的编码八位字节百分比 UTF-8定义的Unicode字符。如果有任何百分比编码 该字符串中的八位字节不是有效的UTF-8序列(例如 展开到代理代码点),然后跳过此步骤和下一步 一个

  • 如果没有跳过此步骤,并且DOM中有一个元素 ID完全等于解码的fragid,然后是第一个这样的 树顺序中的元素是文档的指示部分;停止 这里的算法

  • 如果DOM中有一个具有name属性的a元素 值正好等于fragid(未解码fragid),则 树顺序中的第一个这样的元素是 文件;在这里停止算法

  • 如果fragid是字符串top的ASCII不区分大小写匹配项, 那么文档的指示部分就是文档的顶部; 在这里停止算法

  • 否则,文件中没有指定的部分


  • HTML 4.01和XHTML 1.0规范要求
    a
    元素中的
    name
    属性不得与
    id
    属性的值相同,除非在同一元素上设置,否则文档存在错误。浏览器可以自由地应用自己的错误处理,这可能是意外的

    HTML5草案指定了复杂的错误处理规则,但它们也将
    a
    元素中的
    name
    属性声明为过时


    对同一文档中的两个元素使用相同的
    id
    值是不合逻辑的(正式禁止),因为
    id
    的唯一目的是为元素提供唯一标识符。
    构造早于HTML历史中的
    id
    ,并且在受限的设置中总是要扮演与
    id
    相同的角色。因此,很自然,它被以同样的方式对待。

    有趣-我在HTML5规范中很难找到这一点。如果在“id和name属性共享相同的名称空间。这意味着它们不能在同一文档中定义具有相同名称的锚定。”。我假设这是在HTML5规范中重新定义的,考虑浏览器所执行的常见行为。我想我从来没有想过,你可以使用哈希来滚动到ID或其他任何东西的名称。今天我学到了一些新东西。
    <a name="top">top</a>
    
    <p id="bottom" style="height: 1800px;">
    <a href="#top">top</a>
    <a href="#bottom">bottom</a>
    <br>
    </p>
    <a name="bottom">bottom</a>