2010-05-26 77 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