使用.data()来检索data- *属性的值是个好主意吗?

时间:2011-05-03 06:17:21

标签: jquery html5 custom-data-attribute

在我的项目中,我目前在HTML中使用一些自定义data- *属性来传达jQuery将使用的一些额外数据。我找到了.data()方法,并注意到如果我有一个data- *属性data-my-attribute,我可以通过选择带属性的元素并调用.data("my-attribute")来检索jQuery中的值。

我认为这是它应该被使用的方式(没有查看文档)并通过我的jQuery代码使用它。但是,现在我注意到,当我在HTML data- *属性中添加一个字符串"000005643"时,.data("my-attribute")返回5643.attr("data-my-attribute")返回"000005643"。后者是我想要的。这导致我查阅文档,并且实际发现.data()比我想象的更多。此外,我从未看到任何表明您应该使用.data()来检索data- *属性值的文本或示例。这让我担心我做了一些根本错误的事情。

我应该停止并停止以这种方式使用.data()吗?如果没有,您能否将我链接到一些有关解释此用途的.data()函数的文档。

2 个答案:

答案 0 :(得分:8)

返回HTML5 data-*属性的data()方法为introduced in 1.4.3

  

从jQuery 1.4.3开始,HTML 5数据属性将自动引入jQuery的数据对象。

     

每次尝试都将字符串转换为JavaScript值(包括布尔值,数字,对象,数组和null),否则将其保留为字符串。要将值的属性检索为字符串而不尝试转换它,请使用attr()方法。

Source

看来jQuery肯定你想要一个数字,所以它会为你返回Number,而不是String

如果您想将其作为字符串,请使用attr()

答案 1 :(得分:1)

我实际上正致力于将此功能移植到Zepto。是的,数据 - HTML规范并没有什么问题,但它只是jQuery的实现。它试图解决这样一个事实,即数据不能很好地处理非字符串,然后它会尝试使用它,并为您提取null,int和float等值。我想一个解决方法是在你的值前放一个字符串字符,并在你检索它时将其删除。无论是那个还是使用attr('data-') - 虽然在.data和.attr之间来回传递可能会导致你注意到的不同结果。坚持一个或另一个。