【问题标题】:jquery data not working as expected [duplicate]jquery数据未按预期工作[重复]
【发布时间】:2016-07-07 18:29:28
【问题描述】:

首先我说的是$('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 报告这是故意还是错误

如果它是故意的,那么为什么它会那样做

【问题讨论】:

  • 我已经关闭了重复的问题,感谢您的回答

标签: jquery


【解决方案1】:

这不是错误,因为它是 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);

【讨论】:

  • 我已经关闭了重复的问题,感谢您的回答
【解决方案2】:

您使用attr 设置的值可以使用data 检索,但反之则不行。

这种行为是有意使用小写字符的。

w3c 规范说:

名称不得包含大写字母 A 到 Z。

参考:data-*

这种行为的原因是:

自定义数据属性名称被转换为具有以下规则的 DOMStringMap 条目的键

来自MDN - dataSet

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

$().data('fooBar')

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

但是:您可以在 jQuery 版本 1.5 之前使用大写字符。

【讨论】:

  • 我已经关闭了重复的问题,感谢您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2015-12-20
  • 2018-08-26
  • 1970-01-01
  • 2018-08-20
  • 2013-04-23
相关资源
最近更新 更多