2010-05-26 76 views
3

我是jQuery的.data()方法的忠實粉絲,但我不能總是使用它。通常,我正在渲染通過AJAX傳遞的html模板,我需要將元數據附加到模板中的每個元素。例如:替代jQuery .data()?

<ul> 
{% for item in itemlist %} 
    <li metadata="{{ item.metadata }}">{{ item.name }}</li> 
{% endfor %} 
</ul> 

我知道屬性附加存儲的數據是不好的做法(這可能無法在舊版本的IE甚至工作)。最佳做法是什麼?這種方法有很好的選擇嗎?

回答

3
+0

+1數據屬性 – Anurag 2010-05-27 11:05:54

+0

非常有趣。這將與IE7/8工作? – thebossman 2010-05-28 19:45:16

+0

element.getAttribute(「data-foo」)在支持DOM級別1的每個瀏覽器中都可以很好地工作。當然,這與您的示例元數據屬性一樣好,但重點主要是data- *屬性是保證不與任何未來屬性發生衝突。 (顯然,效度也不錯。) – Ms2ger 2010-05-29 17:01:20

2

如果所討論的元素都具有ids,那麼請將它們(無論是哪種服務器端語言)注入到javascript數組中,其中id是鍵,元數據是值。

例子:

<script type="text/javascript"> 
    var metadata; 
    {% for item in itemlist %} 
     metadata['{{ item.id }}'] = '{{ item.metadata }}'; 
    {% endfor %} 
    //metadata contains a set of id => metadat pairs 
</script> 

<ul> 
    {% for item in itemlist %} 
    <li id="{{ item.id }}">{{ item.name }}</li> 
    {% endfor %} 
</ul> 
+0

您可以添加一個解釋性代碼示例請埃裏克? – 2010-05-27 10:43:11

+0

查看我的更新回答 – Eric 2010-05-27 10:55:05

1

我想連接的是並沒有別的目的,而不是提供元數據是好的,所以做jQueryUI的它似乎製造商類的做法(見:.ui-state-error.ui-state-highlight.ui-state-active,等等),但我不知道這對你來說是否是不好的習慣。

+0

我不認爲jQuery UI的ui-state- *類是元數據,因爲它們會影響關聯元素的樣式。我的問題特別針對不影響風格的數據。 – thebossman 2010-05-28 19:43:36

+0

關鍵在於,如果您從不給這些類提供風格,則可以使用類來存儲數據而不影響樣式。 – mVChr 2010-05-28 19:49:41