元素<a> not allowed as child of element <dl> in this context - Validator Error</dl></a>

时间:2011-04-07 12:47:13

标签: javascript html html5 validation

在HTML 5(实验)windows-1252编码上运行w3Validator之后, 我收到以下错误 -

  

第11行,第20栏:元素a不是   允许作为元素dl的子元素   上下文。 (抑制进一步的错误   从这个子树。)

<a href="#link"><dt>Link</dt><dd>Sub heading of the link</dd></a>

如果<a>不能包含子元素<dl>,那么代码应该如何使用?

注意:上面的代码由js使用,因此代码不会发生重大变化。

更新:整个代码如下 -

<div id="something">
    <dl>
        <a href="#link1"><dt>title1</dt><dd>Sub heading1</dd></a>
        <a href="#link2"><dt>title2</dt><dd>Sub heading2</dd></a>
        <a href="#link3"><dt>title3</dt><dd>Sub heading3</dd></a>
        <a href="#link4"><dt>title4</dt><dd>Sub heading4</dd></a>
        <a href="#link5"><dt>title5</dt><dd>Sub heading5</dd></a>
        <a href="#link6"><dt>title6</dt><dd>Sub heading6</dd></a>
    </dl>
</div>

3 个答案:

答案 0 :(得分:9)

到目前为止发布的所有答案都是错误的。

默认情况下,锚点(或<a>元素)是内联的,是的 - 但您可以使用一些基本的CSS来更改它:

a {
  display: block;
}

除此之外,从HTML5开始,允许使用块级锚点。这意味着你可以做一些很酷的事情:

<a href="#">
 <h1>Foo</h1>
 <p>Bar</p>
</a>

让您的代码验证为HTML5。 (此代码一直在浏览器中有效,在HTML5之前它无效。)

它未验证的真实原因(因此,问题的答案)非常简单:<dt><dd>元素可能只显示为直接孩子 <dl>元素。

答案 1 :(得分:1)

定义列表具有非常特定的结构

<dl>
  <dt>Definition title<dt>
  <dd>Definition description </dd>

  <dt><a href='#'>Definition title</a><dt>
  <dd>Definition description </dd>

  <dt>Definition title<dt>
  <dd><a href='#'>Definition description</a></dd>
</dl>

实际上可以放置LINK的唯一地方是DT或DD。如果我没记错的话,DD被认为是块级元素,并且在任何情况下都不会进入LINK。

编辑:正如@Mathias Bynens在评论中指出的那样,只有 DT和DD元素可能会显示为DL的直接子元素。

HTML5中还允许在块级元素周围放置内联标记

答案 2 :(得分:0)

基本上这是block and inline elements的问题。惯例是你不应该将一个块元素放在内联元素中,<a>标记是内联的,<dl>(和<dt><dd>元素应该是在里面)是块。您正在做的事情类似于在<strong><a>附近放置<form><div>元素,这显然似乎不正确。

您的问题的“答案”是将<a>标记放在单个<dt><dd>标记内,并且只在定义列表中包含定义术语和定义定义标记

无视:没有意识到您正在尝试验证HTML 5.在这种情况下,答案是您不能放置<dt><dd>以外的任何内容作为<dl>的直接子女。