为什么嵌套的锚标记是非法的?

问题描述 投票:36回答:4

我了解到嵌套锚标记不是符合标准的HTML。

从W3:

由A元素定义的链接和锚点不得嵌套; A元素不得包含任何其他A元素。

由于DTD将LINK元素定义为空,所以LINK元素也不能嵌套。

[与this question中所选答案中所建议的替代方案相比,似乎比简单地嵌套锚更可能产生意外行为!

[似乎使onclick事件处理程序仅用于重定向JS中的页面似乎有些矫kill过正。更不用说使用脚本解决方案,对于用户在禁用脚本的情况下浏览也会造成问题。

编辑

有趣的是,我正在研究fiddle以进行演示,而我却忽略了chrome实际上正在像这样重组DOM:

<div id="container">

    <a href="http://yahoo.com"></a>
    <div class="parent">
        <a href="http://yahoo.com">Parent Element</a>
        <a href="http://google.com">
            <div class="child">Child Element</div>
        </a>
        <a href="http://bing.com">
            <div class="child">Other Child</div>
        </a>
    </div>

</div>

我忽略了这一点,因为我看到悬停正在工作并且将鼠标放在文本上。现在知道这一点并不一定能改变我的问题,但可以肯定的是,这甚至不能证明我的想法。

html tags dtd
4个回答
39
投票

请记住,锚不仅是一个链接,它还是可以链接的东西。 (尽管前一种用法比后者更常见。)引用W3C(旧,但相关):

锚是标记超文本链接的开始和/或结束的一段文本。

为此,不要将锚视为链接。可以将其视为文档中与另一点(和/或从另一点)连接的点(在同一文档或另一个文档中,这没有区别)。非物理空间中通过非物理线程连接的两个点。

鉴于,锚点不应包含太多内容。如果包含很多内容,它将不再成为“要点”,而开始成为“区域”。例如,想象一下一个锚点,该锚点在渲染时会占用比浏览器一次显示更多的空间。如果某个东西链接到该锚点,应该去哪里?开始?中间?结束? (直觉上,您可能会想到开始,但是您明白了。)

此外,锚绝对不应包含其他锚。非物理点之间的非物理连接可能会变得模棱两可。子锚是否连接到另一个点,还是父锚连接到另一个点?在大多数情况下,此

可能

并不会带来太大的问题,因为当今的vast大多数锚点都是从锚点到另一个文档的单向链接。但是锚点的目的不仅仅是指向另一个文档的单向链接,因此定义继续体现了这一目的。

8
投票
spec for <a>的内容模型为:

1
投票
由于模棱两可,标准不建议使用锚嵌套(尽管我测试过的所有浏览器似乎都指向最里面的点击目标)。

0
投票
虽然社区中的其他好人给出了很好的答案,

我想贡献

© www.soinside.com 2019 - 2024. All rights reserved.