2011-05-03 43 views
5

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

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

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

回答

8

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

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

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

Source

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

如果你想要它作为字符串,请使用attr()

+1

啊,好的谢谢。所以,如果我理解正确,如果我期待一个'string',我不应该使用'.data()'。否则,我总是不得不担心它是否会被转换并且信息丢失(如前导零)。例如电话号码,063425346。 – 2011-05-03 06:44:34

1

我实际上正在将此功能移植到Zepto。是的,数据HTML规范并没有错,但它只是jQuery的实现。它试图解决这样一个事实,即数据不能非常好地处理非字符串,然后尝试变得花哨并为您提供像null,int和float之类的值。我想一个解决方法是将一个字符串字符放在您的值的前面,并在您检索时将其排除。要么这样做,要么使用attr('data-') - 尽管在.data和.attr之间来回切换可能会导致您发现的不同结果。坚持一个或另一个。

相关问题