2009-08-20 171 views
41

可能重複:
Custom attributes - Yay or nay?
Non-Standard Attributes on HTML Tags. Good Thing? Bad Thing? Your Thoughts?將自己的屬性添加到HTML元素可以嗎?

在當前的學習項目我的工作,我需要補充,其價值將是一個數字的屬性。起初,我想到使用「ID」爲此目的,但an answer透露,這是不好的做到這一點。

如果我創建自己的屬性,說「messid」併爲其分配一個數值,如「12」,「6」等,它可以嗎?

這就是爲什麼我想這樣做,以便您可以糾正我,如果我做它完全錯誤: 我需要在我的JavaScript(使用jQuery)訪問此號碼。只需考慮屬性的值很簡單,但是從「m12」或「m6」這樣的字符串中提取數值是一種痛苦。 (我是JavaScript世界的初學者。)

回答

90

已經有很多討論這個問題:

在一天結束的時候,我是在一個相信數據屬性營地最好的方式去。他們正在HTML5中引入,以避免名稱衝突。從本質上講,如果要存儲任何數據相關的你只是在前面加上屬性名稱「數據 - 」:

<div class="user" data-userid="5"></div> 

唯一CON整個事情就是那麼你的XHTML將無法驗證,但老實說,我不要不關心那些東西。 (沒錯,我說了)

+9

+1。我完全同意這種方法是一個工作解決方案,易於實現,不會破壞任何東西。理想主義的實用主義也在我的書中獲勝。 – AnthonyWJones 2009-08-20 12:19:37

+1

我會這樣做,因爲它今天起作用,並且因爲它在HTML5規範中,它可能會在10年後運行。它還保持數據獨立於其他值(例如將其保留在'id'屬性中,以後可能會因其他原因而更改),同時仍將其保留在元素上。是的,HTML驗證錯誤應該被看作是對問題的建議/指針,而不是必須修復錯誤(並且在那個線索上,我會說JSLint只是爲了激起一些東西=) – Blixt 2009-08-20 12:21:01

+6

「沒錯,我說過「 - 第一步是承認它。 ;) – nickf 2009-08-20 12:33:36

-8

否 - it's not

+0

仇敵 - 我剛纔說什麼了?如果網站沒有通過W3驗證,這很好嗎? – 2009-08-20 12:15:06

+1

我投了這個*只是因爲*我覺得這是一個真正的答案;儘管我猜測這個反對票是由於缺乏解釋。不,我不認爲只提供一個鏈接就足夠了。我相信你應該至少總結一下你所鏈接的頁面,即使你不選擇自己解釋*。 – 2009-08-20 12:17:01

+1

@Arnis:可能會,可能不會,但是如何在您的「答案」中包含少量文本會有多難? – AnthonyWJones 2009-08-20 12:21:26

8

在HTML 5中,您可以添加任何以data-開頭的屬性,例如, <div data-messid="12">是好的。

如果您添加自己的屬性,HTML 4和XHTML 1將不會驗證,但是如果您選擇的屬性名稱足夠獨特(因此它不會與任何當前或未來的HTML屬性發生衝突),則不會發生任何錯誤。

2

我使用自定義屬性,並且由於我檢查過的所有瀏覽器都支持它,所以我認爲使用它們並不差。您還可以使用自定義HTML標記來模擬HTML5,並使用一些IE hack,那麼爲什麼不使用屬性,如果他們不需要任何黑客?

無論如何,你可以在這裏讀到類似的討論: Custom attributes - Yea or nay?

1

這不是一個明確的答案,但已做到這一點,在過去,我可以說這不僅效果很好,它是跨瀏覽器友善。

5

只要你知道,你可以很容易地提取像M12和M6的字符串的ID,我會做這樣的:

//name the IDs m_12, m_3 etc 
var number = $('#someElement').attr('id').split('_')[1]; 

或者如果說,你有號碼一堆鏈接該ID如上所述,且所有環節有clickMe類:

$('a.clickMe').click(function() { 
    alert($(this).attr('id').split('_')[1]); 
}); 
+0

這就是我通常做的事情,如果我只是有一個我想檢索的ID,但有時候不止這些。 – 2009-08-20 12:14:49

+0

我希望我可以upvote只有一次:) – codelame 2016-03-02 19:48:54

1

如果使用jQuery,您可以使用。數據存儲對一個元素的自定義信息。

自定義屬性的缺點是:

  • IE6創建額外的對象來存儲自定義「EXPANDO」的屬性,這些有,如果他們是通過腳本創建的傾向,尤其是泄漏。

  • 驗證問題

+0

我使用ASP。NET MVC和我試圖添加自定義屬性「data-messid」使用HTML幫助器方法的htmlAttribs參數:新{@class =「mcf」,data-dd = Html.AttributeEncode(m.ID)}。但它不起作用(語法問題)。我看到你在ASP.NET MVC標籤中很活躍,所以請你幫助我如何做到這一點? – Hemant 2009-08-20 12:36:01

+0

當然 - 用asp.net mvc標籤詢問另一個Q – redsquare 2009-08-20 12:41:28

+0

,儘管你看起來正確 – redsquare 2009-08-20 12:42:46

相關問題