5

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

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

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

4

2 回答 2

8

The data() method returning HTML5 data-* attributes was introduced in 1.4.3.

As of jQuery 1.4.3 HTML 5 data- attributes will be automatically pulled in to jQuery's data object.

Every attempt is made to convert the string to a JavaScript value (this includes booleans, numbers, objects, arrays, and null) otherwise it is left as a string. To retrieve the value's attribute as a string without any attempt to convert it, use the attr() method.

Source.

It appears jQuery is certain you want a number, so it is returning a Number for you, not the String.

If you want it as a string, use attr().

于 2011-05-03T06:20:14.850 回答
1

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

于 2011-05-03T06:36:50.490 回答