为什么嵌套锚标签不合法?为什么嵌套锚标签不合法?(Why are nested anchor tag

2019-05-08 18:38发布

我了解到,嵌套锚标签不符合标准的HTML。

从W3:

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

由于DTD定义LINK元素是空的,LINK元素可以不被任一嵌套。

这似乎像替代品,如与所选择的答案中提出这个问题将有更多的不是简单地将嵌套的锚创建意外行为的机会!

这也似乎有点小题大做,使onclick事件处理程序只在JS的页面重定向。 且不说使用脚本解决方案将导致用户禁用了脚本的浏览问题。

编辑

有趣的是,我工作的一个小提琴来证明,我已经忽略了镀铬实际上重组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>

我忽略了这一点,因为我看到了悬停工作,并有我的鼠标上的文字。 现在知道这并不一定改变我的问题,但可以肯定确实说明,它甚至不工作,我的思维方式。

Answer 1:

请记住,锚不只是一个环节,它也是东西哪一个可以联系起来。 (虽然前者使用的是远远比后者更常见。)报价W3C (老了,但相关的):

的锚定是一个文本块这标志着开始和/或超文本链接的结束。

为此,别以为锚为纽带的。 可以把它当作其连接到(和/或从)的另一点(相同的文档或者其他文件中,这都没有区别)在文件中的一个点。 两个点在其中通过非物理线程连接一些非物理空间。

鉴于此,锚不应包含了很多内容。 如果它包含了很多内容,它就不再成为一个“点”,并开始成为一个“区域”。 例如,设想一个锚,其呈现时占用更多的空间比所述浏览器可以显示一次。 如果事情链接到锚,它应该在哪里去了? 开始? 中间? 结束? (直觉上你可能会觉得开始的时候,但你的想法。)

此外,锚绝对不应该包含其他锚。 非物理点之间的非物理连接可以变得模糊。 孩子是否锚连接到另一点,还是家长锚连接到另一点? 这可能不会导致被在大多数情况下,一个大问题,因为今天绝大多数锚是从锚点到另一个文档单向链接。 但固定的目的不仅仅是一个单向链接到另一个文档较多,因此定义继续体现这一目的。



Answer 2:

在对规范<a>具有的内容模型:

透明的,但必须有没有交互式内容后裔。

所以规范实际上是更复杂的比你说的。 这也适用于<button> -本质上,你不能有按钮的内部链接或按钮内的工作联系。

不幸的是我没有一个强有力的回答你的问题,为什么 -我只能猜测。 一个明显的原因是含糊其原因(如该锚被点击内一个时,应遵循?)

这不仅创造了功能性歧义,而且语义含糊。 在内容<a>是其超级链接的标签。 那么,这是否意味着内超链接是标签外链接的内容的一部分?



Answer 3:

不建议通过标准锚嵌套(虽然我测试了所有浏览器它似乎导致最里面点击目标),因为含糊不清的。

这不是逻辑地说,很大一部分应该引起一定的页面,并在这部分一小部分应该引起其他地方。 我还是要看到这种行为的任何使用情况。 可用脚本语言的演变,这种迭代或遗产可以工作(在申报单的的JavaScript为例click事件),但从来没有将代码要直接到某个URL,然后到另一个(父锚HREF)。

编辑:看着你在你提到的问题,叠加2个锚指向完全相同的href是完全无用的。 只是删除嵌套之一,一切都会好的。 如果是因为你不喜欢一个CSS规则aa{color:red;}使用范围! 乃至一个DIV display:inline ,但拜托,拜托,锚应该去的地方,不应该只是为了造型的目的或使用的东西。



文章来源: Why are nested anchor tags illegal?
标签: html tags dtd