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


Posted in Javascript onDecember 31, 2012

前段时间同事在群里对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; 
}
Javascript 相关文章推荐
jquery获取html元素的绝对位置和相对位置的方法
Jun 20 Javascript
node.js中的fs.openSync方法使用说明
Dec 17 Javascript
Easyui 之 Treegrid 笔记
Apr 29 Javascript
喜大普奔!jQuery发布 3.0 最终版
Jun 12 Javascript
jQuery弹出窗口简单实现代码
Mar 09 Javascript
JavaScript无缝滚动效果的实例代码
Mar 27 Javascript
JS数组交集、并集、差集的示例代码
Aug 23 Javascript
AngularJS中重新加载当前路由页面的方法
Mar 09 Javascript
微信小程序实现分享到朋友圈功能
Jul 19 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
Aug 08 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
Jan 26 Javascript
微信小程序实现watch监听
Jun 04 Javascript
JavaScript 盒模型 尺寸深入理解
Dec 31 #Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
Dec 30 #Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
Dec 30 #Javascript
javascript中的缓动效果实现程序
Dec 29 #Javascript
通过正则格式化url查询字符串实现代码
Dec 28 #Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
Dec 28 #Javascript
载入jQuery库的最佳方法详细说明及实现代码
Dec 28 #Javascript
You might like
php5.2.0内存管理改进
2007/01/22 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
JavaScript模块模式实例详解
2017/10/25 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
python匹配两个短语之间的字符实例
2018/12/25 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
Python识别html主要文本框过程解析
2020/02/18 Python
python实现画图工具
2020/08/27 Python
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
遗嘱公证书标准样本
2014/04/08 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
文艺晚会策划方案
2014/06/11 职场文书
2014年教师工作总结
2014/11/10 职场文书
测量员岗位职责
2015/02/14 职场文书
关于迟到的检讨书
2015/05/06 职场文书
python四个坐标点对图片区域最小外接矩形进行裁剪
2021/06/04 Python
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android