jQuery中.attr()和.data()的区别分析


Posted in jQuery onSeptember 03, 2017

$.attr()和$.data()本质上属于 DOM属性 和 Jquery对象属性 的区别。

Jquery对象属性和DOM属性

一个简单的例子

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Jquery中.attr和.data的区别</title>
  </head>
  <body>
    <p id="app" data-foo="hello"></p>
  </body>
  <script type="text/javascript" src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
  <script type="text/javascript">
    var getAttr1 = $('#app').attr('data-foo');
    var getData1 = $('#app').data('foo');
    console.log('getAttr1: ' + getAttr1); //hello
    console.log('getData1: ' + getData1); //hello
    $('#app').attr('data-foo', 'world'); //$.attr 设置DOM元素属性值
    var getAttr2 = $('#app').attr('data-foo');
    var getData2 = $('#app').data('foo');
    console.log('getAttr2: ' + getAttr2); //world
    console.log('getData2: ' + getData2); //*** hello ***
    $('#app').data('foo', 'WORLD'); //$.data 设置DOM node属性值
    var getAttr3 = $('#app').attr('data-foo');
    var getData3 = $('#app').data('foo');
    console.log('getAttr3: ' + getAttr3); //world
    console.log('getData3: ' + getData3); //*** WORLD ***
  </script>
</html>

• $.attr()每次都从DOM 元素 中取属性的值,即和视图中标签内的属性值保持一致。 •$.attr('data-foo')会从标签内获得data-foo属性值;

•$.attr('data-foo', 'world')会将字符串'world'塞到标签的'data-foo'属性中;

•$.data()是从 Jquery对象 中取值,由于对象属性值保存在内存中,因此可能和视图里的属性值不一致的情况。 •$.data('foo')会从 Jquery对象 内获得foo的属性值,不是从标签内获得data-foo属性值;

•$.data('foo', 'world')会将字符串'world'塞到 Jquery对象 的'foo'属性中,而不是塞到视图标签的data-foo属性中。

结合上面代码和解释,大家应该能够理解两者的区别。

小结

所以$.attr()和$.data()应避免混合用,也就是应该尽量避免如下两种情况的出现:

1.通过$.attr()来进行set属性,然后通过$.data()进行get属性值;

2.通过$.data()来进行set属性,然后通过$.attr()进行get属性值。

同时从性能的角度来说,建议使用$.data()来进行set和get操作,因为它仅仅修改的 Jquey对象 的属性值,不会引起额外的DOM操作。

以上所述是小编给大家介绍的jQuery中.attr()和.data()的区别分析,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

jQuery 相关文章推荐
jquery实现提示语淡入效果
May 05 jQuery
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
May 19 jQuery
jQuery简介_动力节点Java学院整理
Jul 04 jQuery
基于jQuery Easyui实现登陆框界面
Jul 10 jQuery
jQueryUI Sortable 应用Demo(分享)
Sep 07 jQuery
jQuery EasyUI开发技巧总结
Sep 26 jQuery
jQuery实现所有验证通过方可提交的表单验证
Nov 21 jQuery
jQuery+Cookie实现切换皮肤功能【附源码下载】
Mar 25 jQuery
jQuery使用bind动态绑定事件无效的处理方法
Dec 11 jQuery
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
jQuery实现简单弹幕效果
Nov 28 jQuery
jQuery实现动态向上滚动
Dec 21 jQuery
jQuery Ajax向服务端传递数组参数值的实例代码
Sep 03 #jQuery
jquery tmpl模板(实例讲解)
Sep 02 #jQuery
jQuery EasyUI结合zTree树形结构制作web页面
Sep 01 #jQuery
JQuery EasyUI 结合ztrIee的后台页面开发实例
Sep 01 #jQuery
jquery操作ul的一些操作笔记整理(干货)
Aug 31 #jQuery
jquery插件开发之选项卡制作详解
Aug 30 #jQuery
基于jQuery的左滑出现删除按钮的示例
Aug 29 #jQuery
You might like
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
分享php邮件管理器源码
2016/01/06 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
2016/07/22 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
2017/06/13 Javascript
vue-cli的eslint相关用法
2017/09/29 Javascript
Gulp实现静态网页模块化的方法详解
2018/01/09 Javascript
js实现动态时钟
2020/03/12 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
python实现定制交互式命令行的方法
2014/07/03 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
python中列表和元组的区别
2017/12/18 Python
解决python 输出是省略号的问题
2018/04/19 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
如何清空python的变量
2020/07/05 Python
python如何写try语句
2020/07/14 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
优秀志愿者事迹材料
2014/02/03 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏