jquery数据未按预期工作

时间:2016-07-07 18:29:29

标签: jquery

首先我要谈论$('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报告

如果它的目的是为什么它就像那样

2 个答案:

答案 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条目的键

来自MDN - dataSet

这意味着您可以使用以下内容检索data-foo-bar等数据属性:

$().data('fooBar')

参考:get HTML 5 Data Attributes with hyphens and Case Sensitivity

但是:您可以使用大写字符priot到jQuery 1.5版。