2010-01-22 60 views
15

我覺得它像設置屬性arbitary非常方便:使用非標準HTML屬性被認爲是不好的做法嗎?

<a stackoverflowId="123">...</a> 

而且在JavaScript:

var soId = $selectofA.attr('stackoverflowId'); //jQuery 

它是一個很好的做法呢?我從來沒有遇到過這個問題。

+0

也許如果你描述你需要這個東西,因爲我們可以建議的解決方法。嚴格的答案應該是NO,但總會有一個似乎要求違反規則的角落案例。 – 2010-01-22 14:41:45

+3

我認爲可以打破「規則」的案例不僅僅是角落案例。 – AnthonyWJones 2010-01-22 14:45:44

+1

這是一個常見問題解答:http://stackoverflow.com/search?q=custom+html+attribute – dreftymac 2010-01-22 15:14:40

回答

17

在HTML 5,你可以用data-*屬性做到這一點:

<a id="myDiv" data-stackoverflowId="123">...</a> 

由於您使用jQuery,你可能還需要檢查jQuery Metadata Plugin。它將允許您在類屬性中存儲和解析JSON元數據,並且您的標記仍將進行驗證。

您將能夠插入元數據是這樣的:

<a class="your_class {stackoverflowId: '123'}">...</a> 

,並按如下提取它:

var data = $selectofA.metadata(); 
+0

事實上,我不太在乎HTML5,但是與瀏覽器和開銷的兼容性(所以它是更好地使用更少的插件)。 – user198729 2010-01-22 14:55:18

+4

如果你想與當前的瀏覽器兼容,你正在做什麼可以在所有流行的瀏覽器中工作......但是使用有效的標記可以幫助你保持與當前的**和未來的**瀏覽器兼容。 – 2010-01-22 14:58:06

+5

說真的,元數據的方法不是侮辱受傷嗎?現在我們有一個類的屬性值,它可以是CDATA,符合HTML和XHTML規範,但這與大多數瀏覽器期望的類名或類名列表相差甚遠。我不會打賭我的cookies不會干擾類屬性的正常行爲。 – 2010-01-22 15:20:46

7

如果使用data-屬性,它至少是有效的HTML5。請參閱John Resig's blog post on the subject.

+4

+1這是HTML5小組的承認,人們無論如何都這樣做,所以我們不妨將其標準化。比現在人們大量地重載類屬性要好得多。 – 2010-01-22 14:59:02

+0

另請參閱:http://ajaxian.com/archives/custom-dom-attributes-vs-class-css-styles – dreftymac 2010-01-22 15:20:23

1

我一直這樣做,它很棒。從來沒有遇到過這種技術的任何問題。我想它不是一個壞主意,但使用data-前綴就像在某些答案中所建議的那樣。

如果您對標準合規性非常偏執,您可以以符合標準的方式編寫HTML,並在腳本中設置DOM上的屬性。至少,該文件將被驗證。但由於最終的結果將是相同的,你必須非常不滿,才能採用IMO自然的方式來擴展HTML,因爲它適合你。

另一種方法是編寫一個自定義DTD,該DTD準確定義要使用的擴展名。這種方法在這裏詳細描述:http://www.alistapart.com/articles/customdtd/

基本上這種方法依賴於在某處放置XHTML DTD的修改副本,並使用指向該定製DTD的文檔類型。您可以在修改後的DTD中定義額外的屬性聲明,顯然,w3c驗證器實際上將使用該DTD進行驗證。

但是,我不會使用這種方法爲正常的互聯網面臨的網站,永遠。恐怕有些瀏覽器可能會盡力驗證文檔是否對我的dtd進行了驗證,但是後來在某處中途放棄了一處錯誤。這種自定義的DTD技術並不是非常普遍,我根本不會冒這個常規網頁的機會。

相關問題