在我的随机测试中,我看到了一种将锚标签放在另一个锚标签内的行为。我做了一个jsfiddle。
<a class="groupPopper">
<a class="name"> content</a>
</a>
但是在开发人员工具中,它看起来有所不同:
我相信我们不能将锚标记放在另一个锚标记中,因为单击内部锚会导致click事件冒泡到父锚标记,这是不允许的。
我的假设正确吗?
Answers:
如@ j08691所述,a
HTML语法禁止嵌套元素。HTML规范没有说明原因;他们只是强调规则。
从实际的角度来看,浏览器在其解析规则中有效地实施了这一限制,因此与许多其他问题不同,违反规范将不起作用。解析器有效地将<a>
opena
元素内部的start标记视为在开始新元素之前隐式终止open元素。
因此,如果您编写<a href=foo>foo <a href=bar>bar</a> zap</a>
,则不会获得嵌套元素。浏览器会将其解析为<a href=foo>foo</a> <a href=bar>bar</a> zap
,即两个连续的链接,后跟一些纯文本。
嵌套没有本质上不合逻辑的东西 a
元素:可以实现它们,以便单击“ foo”或“ zap”激活外部链接,单击“ bar”激活内部链接。但是我没有看到使用这种结构的理由,HTML的设计者也可能没有看到这种结构,因此他们决定禁止使用这种结构,从而简化了事情。
(如果您真的想模拟嵌套链接,则可以将普通链接用作外部链接,将span
具有适当事件处理程序的元素用作内部“链接”。或者,可以复制链接:<a href=foo>foo</a> <a href=bar>bar</a> <a href=foo>zap</a>
。)
a > div > a
<a> </a> <div> <a> </a> </ div>这样的结构出现了,所以浏览器实际上不允许嵌套链接(即使存在是一个div之间。
由A元素定义的链接和锚点不得嵌套;A元素不得包含任何其他A元素。
href
嵌套值的实际链接似乎是毫无意义的。
我遇到了与@thinkbonobo相同的问题,并找到了一种无需JavaScript的方法:
.outer {
position: relative;
background-color: red;
}
.outer > a {
position: absolute;
top: 0; left: 0; bottom: 0; right: 0;
}
.inner {
position: relative;
pointer-events: none;
z-index: 1;
}
.inner a {
pointer-events: all;
}
<div class="outer">
<a href="#overlay-link"></a>
<div class="inner">
You can click on the text of this red box. It also contains a
<a href="#inner-link">W3C compliant hyperlink.</a>
</div>
</div>
诀窍是使锚点覆盖整个.outer
div,然后为内部div中的所有其他锚点赋予正值z-index
。完整功劳归于https://bdwm.be/html5-alternative-nested-anchor-tags/
您可以使用对象标签解决此问题。如
<a><object><a></a></object></a>
当尝试使div面板也可以通过按钮单击时,我偶然发现了此问题。我建议的解决方法是使用javascript事件。
这是我创建的一个Codepen示例。 http
这是它的html部分:
<div class=panel onclick="alert('We\'ll hi-ii-ii-ide')">
If you say run<br>
<button onclick="app.hitMe(event)">more</button><br>
<br>
And if you say hide...<br>
</div>
请注意如何捕获内部链接的事件并使用stopPropagation()。这对于确保外部触发器不运行至关重要。
这是无效的HTML。
您不能嵌套a
元素。
因此,根据定义,行为是不确定的。
a
元素的含义是什么?这可能意味着什么?
对于嵌套锚,为防止内部事件冒泡到外部事件,您希望在单击内部事件后立即停止传播。
内部事件的OnClick,请使用e.stopPropagation();
不要那样做。我在应用程序中遇到了同样的问题。您可以简单地<div>
在顶部添加标签,<a>
在子级别添加标签。就像是:
<div id="myDiv"><a href="#"></a>
<a href="#"></a>
</div>
确保在脚本文件中也添加了myDiv的click事件。
window.location.href = "#dashboardDetails";
我知道这是一篇过时的文章,但是我想指出,user9147812的答案比其他任何建议都有效。这就是我堆叠整个事情的方式。
<style>
* {
padding: 0;
margin: 0 border:0;
outline: 0;
}
.outer_anchor {
display: inline-block;
padding: 5px 8px;
margin: 2px;
border: 1px solid #252632;
border-radius: 3px;
background: #1c1d26;
color: #fff;
text-shadow: 0 1px 0 #616161;
box-shadow: 1px 1px 3px #000;
transform: translateY(0);
transition: background 250ms;
}
.inner_anchor {
display: inline-block;
padding: 5px 8px;
margin: 2px;
border: 1px solid #252632;
border-radius: 3px;
background: #1c1d26;
color: #fff;
transform: translate(0px);
}
.inner_anchor:hover {
background: #647915;
}
</style>
<a href="#">ItemX<object><a class="elim_btn" href="#" title='Eliminate'>×</a></object></a>
这是一种不好的编码方式,但是您可以尝试-
<a href="1"> aaaa <table> <tr> <td> <a href="2"> bbbb </a> </ td> </ tr> </ table> </a>
a > div > a
,Chrome和Firefox都让它在我编写时就已经存在,并且它们在解析过程中也没有取消结构化(我还没有测试Edge)。