在我的项目中,我目前在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()
函数的文档。
答案 0 :(得分:8)
返回HTML5 data-*
属性的data()
方法为introduced in 1.4.3。
从jQuery 1.4.3开始,HTML 5数据属性将自动引入jQuery的数据对象。
每次尝试都将字符串转换为JavaScript值(包括布尔值,数字,对象,数组和null),否则将其保留为字符串。要将值的属性检索为字符串而不尝试转换它,请使用attr()方法。
看来jQuery肯定你想要一个数字,所以它会为你返回Number
,而不是String
。
如果您想将其作为字符串,请使用attr()
。
答案 1 :(得分:1)
我实际上正致力于将此功能移植到Zepto。是的,数据 - HTML规范并没有什么问题,但它只是jQuery的实现。它试图解决这样一个事实,即数据不能很好地处理非字符串,然后它会尝试使用它,并为您提取null,int和float等值。我想一个解决方法是在你的值前放一个字符串字符,并在你检索它时将其删除。无论是那个还是使用attr('data-') - 虽然在.data和.attr之间来回传递可能会导致你注意到的不同结果。坚持一个或另一个。