首先我要谈论$('selector').data()而不是$.data()
现在当我搜索它时,我发现了很多关于使用它的问题
例如,请参阅此答案https://stackoverflow.com/a/8708345/2748984它表示您无法使用attr设置数据并使用数据(4年前),但实际上它现在可以正常工作但不是预期的
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.3/jquery.min.js"></script>
<script>
$(function () {
$('#testDiv').attr('data-someThing',1);
alert($('#testDiv').data('someThing'));//alert undefined
alert($('#testDiv').data('something'));//alert 1
alert($('#testDiv').attr('data-something'));//alert 1
alert($('#testDiv').attr('data-someThing'));//alert 1
});
</script>
</head>
<body>
<div id="testDiv">test div</div>
</body>
</html>
它只获取数据名称的小写版本
我的问题是,如果我的意图或错误我应该向jquery报告
如果它的目的是为什么它就像那样
答案 0 :(得分:2)
它不是一个错误,因为它是HTML5 DOM API的一部分。它使用camelCase作为它的转换。我会再次引用DOM API,虽然它已在这里得到解答:
Does jQuery internally convert HTML5 data attribute keys to lowercase?
自定义数据属性转换为 DOMStringMap条目具有以下规则:
- 删除任何短划线(U + 002D);
- 短划线(U + 002D)之后的任何字母,在删除之前,都以大写字母设置。
这并不意味着我同意它......但是它已经写好了,所以它已经完成了。 :)
<强>更新强>
要回答您的评论,您需要首先重写您设置属性的方式。变化:
$('#testDiv').attr('data-someThing',1);
要:
$('#testDiv').attr('data-some-thing',1);
答案 1 :(得分:1)
您使用attr
设置的值可以使用data
重试,但不能反过来。
这是小写字符的行为。
w3c指定说:
名称不得包含大写字母A至Z字母。
参考:data-*
此行为的原因是:
使用以下规则将自定义数据属性名称转换为DOMStringMap条目的键
这意味着您可以使用以下内容检索data-foo-bar
等数据属性:
$().data('fooBar')
参考:get HTML 5 Data Attributes with hyphens and Case Sensitivity
但是:您可以使用大写字符priot到jQuery 1.5版。