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

我了解到,嵌套定位标记不符合标准的HTML。

从W3:

由A元素定义的链接和定位点不能嵌套。 一个A元素不能包含任何其他的A元素。

由于DTD将LINK元素定义为空,因此LINK元素可能不会嵌套。

看起来像在这个问题的select答案中提出的那些替代scheme将有更多的创造出乎意料的行为的机会,而不是简单地嵌套锚!

使用onclick事件处理程序看起来像是矫枉过正,只是为了redirectJS中的页面。 更不用说使用脚本解决scheme会导致禁用脚本浏览的用户出现问题。

编辑

有趣的是,我正在做一个小提琴来演示,而我忽略了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> 

我忽略了这一点,因为我看到hover工作,并有我的鼠标在文本上。 现在知道这并不一定会改变我的问题,但它确实certificate它甚至不以我想的方式工作。

请记住,锚点不只是一个链接,它也是一个可以链接的东西。 (尽pipe前者的使用比后者更普遍)引用W3C (旧的,但相关的):

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

为此,不要把锚点看作一个链接。 把它看作是连接到(和/或来自)另一个点(在同一个文件或另一个文件中,没有区别)的文件中的一个点。 在一些非物理空间中,由非物理线程连接的两点。

鉴于此,锚点不应包含大量内容。 如果它包含了很多内容,它就不再成为一个“点”,并开始成为一个“区域”。 例如,设想一个锚点,当渲染占用比浏览器可以立即显示更多的空间。 如果链接到那个锚点,它应该去哪里? 开始? 中间? 结束? (直觉上你可能会想到开始,但你明白了。)

而且,锚点绝对不应该包含其他的锚点。 非物理点之间的非物理连接可能变得模糊。 子锚是否连接到另一个点,或者父锚是否连接到另一个点? 在大多数情况下,这可能不会造成什么大问题,因为绝大多数锚点今天都是从锚点到另一个文件的单向链接。 但是,锚的目的不仅仅是与另一个文件的单向链接,所以定义继续体现出这个目的。

<a>的规范有一个内容模型:

透明,但不得有互动内容后裔。

所以规范实际上比你说的要复杂得多。 这也适用于<button> – 基本上你不能在button内部的链接或button内部有工作链接。

不幸的是,我没有一个强有力的回答你的问题, 为什么 – 我只能推测。 一个明显的原因就是它引起的模糊性(例如,当点击内部点时,应该遵循哪个锚?)

这不仅产生了function上的模糊性,而且造成了语义模糊性。 <a>的内容是其超链接的标签。 那么这是否意味着内部超链接是外部链接内容标签的一部分?

标准build议不要使用嵌套嵌套(尽pipe我testing过的所有浏览器似乎都会导致最内层的点击目标),因为含糊不清。

说大部分应该导致某个页面,在这部分小部分应该导向其他地方是不合逻辑的。 我仍然必须看到这种行为的任何用例。 随着可用的脚本语言的发展,这种迭代或遗产可以工作(例如在JavaScript上点击事件例如div),但从来不会代码想要直接到某个URL,然后到另一个(父锚'href)。

编辑:看你在你引用的问题,堆栈2指向完全相同的HREF锚是完全无用的。 只要删除嵌套的一切,一切都会好起来的。 如果是因为你做了一个像aa{color:red;}这样的CSS规则aa{color:red;}使用span! 或者甚至是一个带display:inline的div display:inline但是请,漂亮,请锚,应该去某个地方,不应该只用于造型目的什么的。