jQuery $.data()方法使用注意细节

 更新时间:2012年12月31日 11:47:33   作者:  
前段时间同事在群里对jQuery里的.data()方法大发牢骚,接下来介绍jQuery $.data()方法使用注意细节,需要了解的朋友可以参考下
前段时间同事在群里对jQuery里的.data()方法大发牢骚:
XXX(NNNNNNN) 15:11:34
<a id="a" data-xxx="00123" />
alert($('#a').data('xxx'));//123
data方法不靠谱
XXX(NNNNNNN) 15:13:17
老老实实用attr('data-xxx')吧细研究了下jQuery文档对.data()方法的描述:
复制代码 代码如下:

As of jQuery 1.4.3 HTML 5 data- attributes will be automatically pulled in to jQuery's data object.
The treatment of attributes with embedded dashes was changed in jQuery 1.6 to conform to the W3C HTML5
specification.

针对如下示便
复制代码 代码如下:

<div data-role="page" data-last-value="43" data-hidden="true" data-options='{"name":"John"}'></div>
$("div").data("role") === "page";
$("div").data("lastValue") === 43;
$("div").data("hidden") === true;
$("div").data("options").name === "John";

即当使用.data()获取值时,jQuery会首先尝试将获取的字符串值转化成JS类型,包括布尔值,null,数字,对象,数组:
若值是”true|false”,则返回相应的布尔值;
若值是”null”,则返回null;
若值是纯数字构成的字符串(+data + ”” === data),则返回相应的数字(+data);
若值是由(?:\{[\s\S]*\}|\[[\s\S]*\])$,比如”{key:value}“或[1,2,3],则尝试使用jQuery.parseJSON解析之;
否则返回字符串值
当然文档里也特意说明了——如果就是想获取字符串值而不想获得自动转换的值,可以使用.attr(“data-”+key)来获取相应的值:
复制代码 代码如下:

To retrieve the value's attribute as a string without any attempt to convert it, use the attr() method.

如下为jQuery源码
复制代码 代码如下:

function dataAttr( elem, key, data ) {
// If nothing was found internally, try to fetch any
// data from the HTML5 data-* attribute
if ( data === undefined && elem.nodeType === 1 ) {
// rmultiDash = /([A-Z])/g
var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
data = elem.getAttribute( name );
if ( typeof data === "string" ) {
try {
/*.data(key)方法尝试将获取的值转化成JS类型,包括布尔值,null,数字,对象,数组*/
data = data === "true" ? true :
data === "false" ? false :
data === "null" ? null :
// Only convert to a number if it doesn't change the string
+data + "" === data ? +data :
/*rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,*/
rbrace.test( data ) ? jQuery.parseJSON( data ) :
data;
} catch( e ) {}
// Make sure we set the data so it isn't changed later
jQuery.data( elem, key, data );
} else {
data = undefined;
}
}
return data;
}

相关文章

  • 微信小程序实现多层级复选框菜单

    微信小程序实现多层级复选框菜单

    这篇文章主要为大家详细介绍了微信小程序实现多层级复选框菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • js替换字符串中所有指定的字符(实现代码)

    js替换字符串中所有指定的字符(实现代码)

    下面小编就为大家带来一篇js替换字符串中所有指定的字符(实现代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • 原生js实现放大镜特效

    原生js实现放大镜特效

    这篇文章主要为大家详细介绍了原生js实现放大镜特效,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • js实现头像上传并且可预览提交

    js实现头像上传并且可预览提交

    这篇文章主要介绍了js如何实现头像上传并且可预览提交,帮助大家更好的理解和使用js,感兴趣的朋友可以了解下
    2020-12-12
  • 基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式

    基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式

    本文给大家介绍基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式,涉及到javascript语法特征相关知识,对本文感兴趣的朋友快来一起学习吧
    2015-10-10
  • js实现简易弹幕系统

    js实现简易弹幕系统

    这篇文章主要为大家详细介绍了js实现简易弹幕系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 基于JS实现页面悬浮框的实例代码

    基于JS实现页面悬浮框的实例代码

    这篇文章主要介绍了基于JS实现页面悬浮框的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • JS文件/图片从电脑里面拖拽到浏览器上传文件/图片

    JS文件/图片从电脑里面拖拽到浏览器上传文件/图片

    这篇文章主要介绍了JS文件/图片从电脑里面拖拽到浏览器上传文件/图片,需要的朋友可以参考下
    2017-03-03
  • three.js中文文档学习之通过模块导入

    three.js中文文档学习之通过模块导入

    这篇文章主要给大家介绍了关于three.js中文文档学习之通过模块导入的相关资料,文中通过示例代码介绍的非常详细,对大家学习或使用three.js具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • 微信小程序实现上传图片功能

    微信小程序实现上传图片功能

    这篇文章主要为大家详细介绍了微信小程序实现上传图片功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论