2011-06-21 85 views
7

任何你可以用ID做的事情,你可以用類來做。爲什麼ID存在?

那麼爲什麼有一個ID屬性呢?

呀ID是唯一的,但是一個類可以是唯一的也...

+11

我認爲downvoting w/o評論應該被禁用,除非你是10K + –

+0

從維基百科:id屬性提供了一個元素的文件範圍的唯一標識符。這用於標識元素,以便樣式表可以更改其表示屬性,並且腳本可以更改,動畫化或刪除其內容或表示。附加在頁面的URL上,它爲元素提供了一個全局唯一的標識符,通常是頁面的一個子部分。例如,http://en.wikipedia.org/wiki/HTML#Attributes –

+0

@MK中的ID「屬性」:我無法快速輸入,確定... –

回答

8

首先,從HTML 4.01 Specification Section 7.5.2

ID =名

該屬性分配一個名稱的元素。該名稱在文檔中必須是唯一的。

類= CDATA列表

該屬性分配一個類名稱或一組類名的給一個元素。任何數量的元素可以被分配相同的類名稱或名稱。多個類名稱必須用空格字符分隔。

我明白你的問題的精神,是故意選擇唯一的類名,你可以模擬通過ID屬性給出的功能,可以說是讓id屬性是多餘的。那麼,我可以想到至少有一件事情可以做到只有與ID;使用for屬性將<label>元素與表單元素相關聯。例如:

<label for="firstname">First Name:<label> 
<input type="text" id="firstname" name="firstname" value="" /> 

這是一個出於可訪問性原因的良好做法。如果您使用複選框或單選按鈕元素使用<label for="id">,則可以獲得可點擊標籤的額外獎勵。例如:

<label for="male">Male</label> <!-- the word "Male" is clickable --> 
<input type="radio" id="male" name="sex" value="male" /> 
<label for="female">Female</label> <!-- the word "Female" is clickable --> 
<input type="radio" id="female" name="sex" value="female" /> 
+1

沿着同樣的路線,一些[WAI-ARIA屬性](http://www.w3.org/TR/2010/WD-wai-aria-20100916/states_and_properties )只能使用ID。詠歎調,詠歎調,詠歎調,詠歎調,詠歎調和詠歎調。 – Alohci

4

類是一組類似的元件 ID是唯一的元件。 如果你想改變所有的複選框,你可以使用class。 如果你想對特定的複選框做些什麼,你可以使用id。

+0

你可以使用這個ID作爲一個類,所以在這種情況下ID屬性是不必要的 – Alex

+1

@Alex你要**識別**對象,而不是** class **它。你不把它放在某個班級,你給它一個身份。這是更多的語義。 – 2011-06-21 04:03:50

11

DOM不存在只是爲了樣式元素 - 元素也可以被操作(通常通過Javascript),並且通常通過ID選擇元素比通過類選擇要高效得多。

3

這個tizag文章可能會更好地解釋它。在HTML中的每個標準中,classid具有不同的功能。例如,id(通常)僅用於一次,以表示唯一元素。 class(通常)用於定義一組元素。

+0

很好的鏈接,但請引用/總結一下。 –

+0

在Ball先生的要求下增加了一些總結 – esqew

2

http://www.w3.org/TR/html401/struct/global.html#adef-class

id屬性在HTML幾個角色:

作爲一個樣式表選擇。

作爲超文本鏈接的目標錨。

作爲從腳本引用特定元素的手段。

作爲聲明的OBJECT元素的名稱。

對於用戶代理的通用處理(例如,用於在從HTML頁面提取數據到數據庫中時識別字段,將HTML文檔翻譯成其他格式等)。

另一方面,class屬性將一個或多個類名稱分配給一個元素;該元素可以說屬於這些類別。類名可以由多個元素實例共享。 class屬性在HTML中有幾個角色:

作爲樣式表選擇器(當作者希望將樣式信息分配給一組元素時)。

用於用戶代理的通用處理。

我似乎無法找到時class屬性添加到HTML規範的參考,但我可以從我記得id屬性很多靠後(特別是對形式的個人經驗說處理)。

3

任何你可以用ID做的事情,你可以做類。

其實沒有。如果你給一個元素的ID,也可以是一個鏈接的目標(例如,http://www.example.com/page#foo把你帶到與id="foo"的元素page,這是現在優於舊<a name="foo">機制。)

那麼爲什麼那裏有一個ID屬性呢?

因爲它們服務完全不同的目的。上面的例子只是網頁內容的唯一標識符可能被使用的衆多用途之一。有一個獨特的標識符對事物之間的關係很重要。

呀ID是唯一的,但一個類可以是唯一的太...

可以是是手術的短語。如果我告訴瀏覽器使用「foo」id查找元素,一旦它找到該元素,它可以停止查找。如果我告訴它我需要類「bar」的元素,它必須搜索整個DOM才能找到它們。

+0

錨定參數是一個很好的參數,我沒有想到:) +速度對我來說似乎並不重要,因爲文檔在客戶端的計算機上被解析 – Alex