2011-01-11 26 views
3

我試圖通過jQuery中的.attr();函數爲某些頁面元素創建一些自定義屬性,以使選擇更容易。jQuery:如何將有用的信息添加到我的頁面元素?

我認爲這可能是不鼓勵的,因爲在jQuery和javaScript中有很大的靈活性,作爲新手,我還沒有學會充分利用它的潛力。

除了製作神祕的ID或添加大量的類以外,還有哪些方法可以將更多信息添加到我的div和其他頁面元素,以便通過選擇器$()輕鬆選擇?

我基本上對利弊感興趣,以及基於不同方法產生的內存問題或速度問題。

回答

5

在您的元素上創建自定義屬性都沒有問題。無論如何,你應該遵循html5 data-規範。

<div id="foo" data-info="hello" data-more="{'iam': 'anobject'}" /> 

關於使用這個很酷的事情是,jQuery的(最新版本)會自動解析data-x屬性,並增加了那些進入.data()的expando。

$('#foo').data('info') === 'hello' 
$('#foo').data('more').iam === 'anobject' 

你仍然能夠像

$('div[data-info=hello]') 

你的元素運行一個選擇。

編號:.data()html5 data attributes

+0

這是否會導致XHTML嚴格不驗證?我並不打算將此作爲解決方案;我只是好奇。 – Andy 2011-01-11 16:27:32

+0

請原諒,但如何選擇具有匹配數據信息屬性的所有元素? – sova 2011-01-11 16:28:18

+0

@nalroff:它可能會失敗HTML4驗證。但是,嚴肅地說,誰真正關心這種情況。 – jAndy 2011-01-11 16:28:45

2

HTML5引入data-* attributes。所以如果你要引入自定義屬性,我至少會堅持這個規範。

jQuery中還有.data()方法用於將任意數據與元素相關聯。只要你不需要在選擇器中使用數據,這是首選的方法。

1

的jQuery插件通常使用一些已經存在的屬性,如「相對」或「標題」,但jQuery的也有.data()方法存儲在JavaScript中對特定對象的信息。它就像一個日誌。

http://api.jquery.com/jQuery.data/

的這個技術均是可以接受的和工作得很好。

1

首先要注意的是, jQuery selectors分別是極其強大。您並不總是需要通過ID或班級進行選擇 - 您可以通過標籤,按類型,與其他選擇(孩子/父母/兄弟姐妹/等)的關係進行選擇。因此,可能不需要爲各種元素添加ID或類以選擇它們。

這樣說,不要避免類和ID只是爲了避免類和ID。他們的存在是有原因的,而這個原因是爲了讓他們選擇簡單易懂的(不管是用jQuery還是CSS還是其他的)。如果你刪除類和ID,你可能會讓你的HTML看起來更好,但是你的jQuery代碼可能會變得複雜和/或效率非常低。 (例如,選擇一個ID的速度總是比選擇一個父組件的速度快,並找到它的孩子。)

0

唯一ID是通過jQuery查找元素的最快方法,所以如果您的誘惑的目的是爲了讓你的元素更容易jQuery檢索,這似乎毫無意義。

我已經使用這樣的技術來添加屬性,如標題或替代品,以獲得更好的可訪問性。

1

我不認爲你應該氣餒使用attr()。這是一個強大的工具,真的有助於爲您的元素添加更多信息。我有一些使用它來支持內部JavaScript框架的項目,它使我的代碼變得清晰易讀。它的好處是可以輕鬆地與選擇器一起工作!

0

使用.data('key', 'val')來設置您的數據和.data('key')來讀取它。

相關問題