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 相关文章推荐
node.js+jQuery实现用户登录注册AJAX交互
Apr 28 jQuery
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
May 05 jQuery
jQuery实现简单的手风琴效果
Apr 17 jQuery
jQuery实现拼图小游戏(实例讲解)
Jul 24 jQuery
jQuery选择器中的特殊符号处理方法
Sep 08 jQuery
jquery ajax异步提交表单数据的方法
Oct 27 jQuery
jquery中有哪些api jQuery主要API
Nov 20 jQuery
jquery.onoff实现简单的开关按钮功能(推荐)
May 24 jQuery
jQuery实现网页拼图游戏
Apr 22 jQuery
详解jQuery-each()方法
Mar 13 jQuery
基于ajax及jQuery实现局部刷新过程解析
Sep 12 jQuery
jquery插件实现搜索历史
Apr 24 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
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
splice slice区别
2006/10/09 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
python迭代器的使用方法实例
2013/11/21 Python
python中import学习备忘笔记
2017/01/24 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
Python 如何测试文件是否存在
2020/07/31 Python
python如何随机生成高强度密码
2020/08/19 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
自动化专业毕业生自荐信
2013/11/01 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
JavaScript 数组去重详解
2021/09/15 Javascript