2011-04-07 23 views
1

在HTML運行w3Validator 5(實驗)窗口-1252編碼, 後,我得到了下面的錯誤 -元<a>不允許在此背景下元素<dl>的孩子 - 校驗錯誤

11行,列20 :元素a不允許 作爲此 上下文中元素dl的子元素。 (從這個子樹抑制進一步的錯誤 。)

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

如果<a>不能包含子元素<dl>那麼應該如何代碼中使用?

注意:上面的代碼是由js使用的,所以在代碼中不應該有重大更改。

UPDATE:整個代碼如下 -

<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> 

回答

9

發佈的所有回答都是錯誤的。

錨(或<a>元素)是內嵌在默認情況下,是的 - 但你可以通過使用一些基本的CSS改變:

a { 
    display: block; 
} 

除此之外,隨着HTML5的,塊級錨是允許的。這意味着你可以做很酷的事情,如:

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

並讓你的代碼驗證爲HTML5。 (此代碼已在瀏覽器中始終工作,這只是不是HTML5之前有效)

真正原因,它不驗證(因此,在回答你的問題)是非常簡單的:<dt><dd>元素可能僅顯示爲元素的直接子女

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

0

允許基本上它是與block and inline elements的問題。慣例是你不應該把一個塊元素放在一個內聯元素中,一個<a>內聯標籤和一個<dl>(以及其內部的<dt><dd>元素)是阻塞的。你在做什麼類似於將<strong><a>元素放在<form><div>左右,這顯然看起來不正確。

您的問題的'答案'是將<a>標記放入單獨的<dt><dd>標記中,並且只在定義列表中包含定義術語和定義定義標記。

否認:不知道你試圖驗證HTML 5。在這種情況下,答案是,你不能把任何其他比<dt><dd>作爲<dl>直接孩子。

+1

HTML5允許塊級錨定,因此您的解釋沒有任何意義。見[我的答案](http://stackoverflow.com/questions/5581257/element-a-not-allowed-as-child-of-element-dl-in-this-context-validator-erro/5581416#5581416) 。 – 2011-04-07 12:55:17

+0

其實我試圖得到一個塊懸停效果...如果我單獨放置,jquery會對動畫造成一些干擾。 – 2011-04-07 12:56:28

相關問題