jquery使用连字符和区分大小写获取HTML 5数据属性

Unk*_*own 35 html jquery html5 custom-data-attribute jquery-data

如何使用jquery获取数据属性.data()?在哪种情况下,html5 data-*属性转换为小写和camelcase?使用自定义属性存储数据时要遵循的主要规则是什么?

<input type="button" class="myButton" value="click me" data-productId="abc"/>
<input type="button" class="myButton" value="click me" data-product-id="abc"/>
<input type="button" class="myButton" value="click me" data-PRODUCT-ID="abc"/>
<input type="button" class="myButton" value="click me" data-ProDUctId="abc"/>
Run Code Online (Sandbox Code Playgroud)

Unk*_*own 92

HTML5允许我们创建自己的自定义属性来存储数据.自定义属性可以被称为任何我们喜欢的东西,比如变量名称,但是它们需要加上单词'data',单词用短划线分隔.您可以将"foo","bar"和"foo bar"数据属性添加到这样的输入:

<input type="button" class="myButton" value="click me" data-foo="bar" 
data-bar="baz" data-foo-bar="true">
Run Code Online (Sandbox Code Playgroud)

jQuery的.data()方法将为您提供对data-*属性的访问.

使用jQuery直到1.4版本,数据属性不区分大小写,因此:

<input type="button" class="myButton" value="click me" data-productId="abc"/>
Run Code Online (Sandbox Code Playgroud)

可以访问

$('.myButton').data('productId');
Run Code Online (Sandbox Code Playgroud)

jQuery 1.5和1.6

但是,jQuery 1.5和1.6中的更改意味着数据属性现在被强制为小写,因此:

<input type="button" class="myButton" value="click me" data-productId="abc"/>
Run Code Online (Sandbox Code Playgroud)

只能访问

$('.myButton').data('productid');
Run Code Online (Sandbox Code Playgroud)

任何data-*属性都将成为元素数据集对象的属性.新属性名称派生如下:

  • 属性名称将转换为全部小写字母.
  • data-前缀从属性名称剥离.
  • 任何连字符也会从属性名称中删除.
  • 其余字符将转换为CamelCase.紧接在步骤3中删除的连字符后面的字符变为大写.

请注意,原始属性名称data-product-id已转换为productId数据集对象.命名data-*属性时必须考虑名称转换过程.由于属性名称转换为小写,因此最好避免使用大写字母.以下示例显示了多个属性名称如何转换为数据集属性.

"data-productId"  translates to "productid"
"data-product-id" translates to "productId"
"data-PRODUCT-ID" translates to "productId"
"data-ProDUctId"  translates to "productid"
Run Code Online (Sandbox Code Playgroud)

注意:

  • 自定义数据属性通常用于存储有助于/简化JavaScript代码的元数据.
  • 元素可以包含任意数量的自定义数据属性.
  • 仅当不存在更合适的元素或属性时,才应使用自定义数据属性.例如,您不应在图像上创建自定义"文本描述"属性.现有alt属性是更好的选择.
  • HTML5规范明确规定data-*第三方应用程序不应使用属性.这意味着搜索引擎等程序在准备搜索结果时不应依赖自定义数据属性.

在HTML5中实现自定义属性本身并不复杂,但真正的困难在于选择是否适合在自己的项目中使用它们,如果是,那么如何有效地进行它.最后,请记住,对于您的页面所依赖的功能,开始使用数据集方法还为时尚早,因此请务必为不支持的浏览器提供替代方案.

DEMO

  • 很好的资源..之前没有听说过.. +1 (4认同)
  • 这不仅仅是一个jquery事情,这里是规范:https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset自定义数据属性名称转换为DOMStringMap条目的键遵循以下规则:1.删除前缀数据(包括破折号); 2.对于任何破折号(U + 002D)后跟ASCII小写字母a到z,删除破折号并将字母转换为大写字母; 3.其他字符(包括其他短划线)保持不变. (4认同)
  • 我发现值得注意的是,使用 **jquery** 仍然可以通过 **连字符** 名称访问数据属性的值,例如 `$('&lt;a data-product-id="One2Three"&gt;&lt;/ a&gt;').data('product-id')` 将是 `One2Three`。刚才检查了 **jQuery 3.3.1**,但 **1.6** 也是如此。 (2认同)