2010-01-31 34 views
1

我正在尋找標記有序定義列表的最符合語義的正確和理智的方法。我曾考慮過如何採取這種做法。標記已定義的定義列表

首先我在每個列表項中使用了一個有2個段落的有序列表。但後來我想起了定義列表元素。

<dl> 
    <dt>Something</dt> 
    <dd>Definition</dd> 

    <dt>Something2</dt> 
    <dd>Definition2</dd> 
</dl> 

但是,因爲我需要能夠通過JavaScript以編程方式訪問每個定義我不知道這會工作。

解決方法可能是將定義分隔成不同的dl標籤。但是這看起來不太好。有沒有更正確的方法?或者我錯誤地認爲通過Javascript訪問「正常」定義列表更復雜?

<dl> 
    <dt>Something</dt> 
    <dd>Definition</dd> 
</dl> 
<dl> 
    <dt>Something2</dt> 
    <dd>Definition2</dd> 
</dl> 
+0

你究竟想要做什麼?第一個例子有什麼問題? – nickf 2010-01-31 15:09:30

+0

寫下較短的精簡問題。 它非常有幫助。 – oneat 2010-01-31 15:16:41

+1

這個問題的一些有趣的歷史背景:XHTML2規範有一個''元素,可用作相關的'

'和'
'元素的分組。關於在CSS3中添加一個':: di'僞元素的WWW樣式的討論,可以爲樣式提供相同的目的。一個有趣的閱讀:http://lists.w3.org/Archives/Public/www-style/2009Dec/0264.html – 2010-02-01 02:31:57

回答

2

但是因爲我需要能夠訪問每個定義編程通過JavaScript我不知道這會工作。

只要得到各個清晰度項<dt>然後得到的DOM樹,它應始終是定義描述<dd>旁邊的元素。 jQuery在這裏有很大的幫助。這裏是一個SSCCE,只是copy'n'paste'n'run它:

<!doctype html> 
<html lang="en"> 
    <head> 
     <title>SO question 2172138</title> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
     <script> 
      $(document).ready(function() { 
       $('#dl dt').each(function(i, dt) { 
        dt = $(dt); 
        dds = dt.nextAll().map(function() { return $(this).is('dd') ? this : false; }); 
        alert(dt.text() + " = " + dds.text()); 
       }); 
      }); 
     </script> 
    </head> 
    <body> 
     <dl id="dl"> 
      <dt>Term1</dt><dd>Desc1a</dd><dd>Desc1b</dd> 
      <dt>Term2</dt><dd>Desc2a</dd> 
      <dt>Term3</dt><dd>Desc3a</dd><dd>Desc3b</dd> 
     </dl> 
    </body> 
</html> 
+0

這沒有考慮到每個術語具有多個定義的完全有效用例。 – 2010-02-01 02:30:04

+0

洛爾,什麼樣的態度。修正了,謝謝;) – BalusC 2010-02-01 03:06:18