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功能函数详解
Feb 01 Javascript
jQuery入门之层次选择器实例简析
Dec 11 Javascript
JavaScript获取IP获取的是IPV6 如何校验
Jun 12 Javascript
Javascript中级语法快速入手
Jul 30 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
Nov 30 Javascript
bootstrap模态框消失问题的解决方法
Dec 02 Javascript
轻松理解Javascript变量的相关问题
Jan 20 Javascript
Vue.js中的图片引用路径的方式
Jul 28 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
Jun 07 Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
Dec 30 Javascript
Vue 组件复用多次自定义参数操作
Jul 27 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
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
Bootstrap布局组件应用实例讲解
2016/02/17 Javascript
逻辑表达式中与或非的用法详解
2016/06/06 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
python通过floor函数舍弃小数位的方法
2015/03/17 Python
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
Python减少循环层次和缩进的技巧分析
2016/03/15 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
教学个人的自我评价分享
2014/02/16 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
怎样写离婚协议书
2015/01/26 职场文书
团代会开幕词
2015/01/28 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
第一节英语课开场白
2015/06/01 职场文书
遗失证明范文
2015/06/19 职场文书