attr()的用法

attr()获得属性值

通过attr()获得属性时,可以这样$(selector).attr(attrName)。注意,其返回值始终是string型! 
eg : 通过attr()得到的属性age的值是”23”,属性iswork的值是”true”。 
另外需要注意的是,attr()对传入的attrName大小写不敏感,就是说attr(‘name’)和attr(‘NAME’)都能得到期望的返回值。

<div class="card" id="jq-attr" name="zx" AGE="23" isWork="true"></div>
$('#jq-attr').attr('age'); // "23"
$('#jq-attr').attr('iswork'); // "true"

attr()添加和修改属性

attr修改属性支持三种方式,即可以向API传递三种形参:attr(attrName, value),attr(attrName, function),attr(obj)。 
如果第二个参数是function,那么该function会被执行,并将执行结果作为attr()的返回值。 
attr(obj)等同于多次调用attr(attrName, value),比如attr({attr1: value1, attr2: value2}),等同于attr(attr1, value1).attr(attr1, value2); 
在JavaScript代码,可以通过attr()动态修改属性值和添加新属性,如果传入value是对象,最终会获得↓↓↓

var $el = $('#jq-attr');
$el.attr('attr1', {name: 'chen'});
$el.attr('attr1'); // "[object Object]"$el.attr('attr2', [1, 2, 3]);
$el.attr('attr2'); // "1, 2, 3"$el.attr('attr3', null);
$el.attr('attr3'); // "undefined"$el.attr('attr4', undefined);
$el.attr('attr4'); // "undefined"

可以看出,如果value是基本数据类型的一种,那么直接返回相应的字符串,但是null value返回的是“undefined”并非”null”。如果value是一个对象,那么对象的toString()会被调用,执行结果即attr()的返回值。

data()的用法

data()修改数据和绑定新数据

和attr()类似,可在页面生成时绑定数据,实际是给元素添加名称为data-*的属性。

<div class="card" id="jq-attr" data-name="chen" data-AGE="23" isWork="true"></div>

在JavaScript里,data()修改数据可以这样:data(key, value)和data(obj)。后者等同于data(key1, value1).data(key2, value2)。还有一种方式,如下

var data = $el.data();
data.attr = 10;
在使用data()修改数据时,如果value是undefined类型,那么数据不会保存或更新。
$el.data('school', undefined);
$el.data().hasOwnProperty('school'); // true
$el.data('attr ', undefined);
$el.data('attr '); // 10

data()获取数据

往data()传入一个string称之为key的参数即data(key),或者data()[key]来获得与key对应的value。但是注意一点,data()可能会返回undefined如果没有任何数据绑定,所以data(key)的方式更为安全。和attr()值返回string类型的值不一样,data()会对静态绑定的数字、布尔、对象、数组和null进行转换。看下面几个例子。

<div class="box" id="jq-data" data-name="zx" data-AGE="23" data-isWork="true" data-func="function(){}" data-list='{"listname":"eric chen"}' data-undefinedkey="undefined" data-nullkey="null" data-last-value="100"></div>
var $el = $('#jq-data');
$el.data('age'); // 23
$el.data('AGE'); // undefined
$el.data('isWork'); // true
$el.data('func'); // "function() {}"
$el.data('list'); // obj {"listname": "eric chen"}
$el.data('undefinedkey'); // "undefined"
$el.data('nullkey'); // null
$el.data('lastValue'); // 100
$el.data('lastvalue'); // undefined

如果在HTML里静态绑定了数据,通过data()来获取数据时,key必须全小写,比如绑定data-AGE=”23”,只能通过data(‘age’)而不是data(‘AGE’)。另外注意data-last-value=”100”,只能通过data(‘lastValue’)或者data(‘last-value’)。 
在JavaScript里通过data()修改数据,再获取值时,须严格按照指定的key。比如data(‘AGE’, 22),这时data(‘age’)是23,data(‘AGE’)返回22。这时因为,在JS里第一调用data()时,会将HTML里静态绑定的数据,复制到jQuery.cache变量里,复制时key中的字符都转换为对应的小写字母。再次使用data()修改数据或添加新数据时,对key不会转换为小写字母,也不会对存入的数据做类型转换! 
通常,data(‘lastValue’, value)和data(‘last-value’, value)修改的是同一数据。 
但是如果不给data()传入任何参数来获得绑定在$el上的所有数据即一个JSON对象,然后修改这个对象的属性值。

var dt= $el.data();
dt['last-value'] = 99;
dt.lastValue = 100;$el.data('last-value'); // ?
$el.data('lastValue'); // ?

你会发现el.data(′last−value′)返回99,而el.data(′last−value′)返回99,而el.data(‘lastValue’)返回100。另外一种方式与此等价: 
$el.data({‘last-value’: 99, ‘lastValue’: 100});

小结 
如果是为了存储和传递页面元素相关的数据,data()比attr()是更好的选择。了解data()的工作方式,才能正确使用这个API。

转载于:https://www.cnblogs.com/yuan9580/p/11343938.html

【转】data和attr的用法与区别相关推荐

  1. python cut函数_基于python cut和qcut的用法及区别详解

    我就废话不多说了,直接上代码吧: from pandas import Series,DataFrame import pandas as pd import numpy as np from num ...

  2. Spark中CheckPoint、Cache、Persist的用法、区别

    Spark中CheckPoint.Cache.Persist 大家好,我是一拳就能打爆A柱的猛男 这几天看到一套视频<尚硅谷2021迎新版大数据Spark从入门到精通>,其中有关于检查点( ...

  3. ajaxForm() 和 ajaxSubmit() 的用法与区别

    一.Query.form.js 介绍 Query.form.js 是一个 form 插件,可以实现表单提交并在当前页面中处理返回值,即 html 中提交表单并实现不跳转页面处理返回值. 二.下载地址 ...

  4. @ini_get php,php中get_cfg_var()和ini_get()的用法及区别_php技巧_脚本之家

    本文实例讲述了php中get_cfg_var()和ini_get()的用法及区别.分享给大家供大家参考.具体分析如下: php里get_cfg_var()和ini_get()都是取得配置值的函数,当你 ...

  5. return true Java_[Java教程]js中return,return true,return false的用法及区别

    [Java教程]js中return,return true,return false的用法及区别 0 2015-11-16 23:00:03 1.语法及返回方式 ①返回控制与函数结果 语法为:retu ...

  6. 【Java学习笔记之二十九】Java中的equals和==的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String(&quo ...

  7. 【jQuery 区别】attr()和prop()的区别

    1>>> 今天实现一个 点击更新按钮 ,可以勾选上本行的的checkbox的功能: 使用代码: 1 /** 2 * updateproduct.htmls 更新 产品信息 3 */ ...

  8. python ord()与chr()用法以及区别

    python ord()与chr()用法以及区别 原文:http://blog.csdn.net/yulock/article/details/52904035 ord()函数主要用来返回对应字符的a ...

  9. matlab ezplot fplot,【转】Matlab plot fplot ezplot用法与区别

    [转]Matlab plot fplot ezplot用法与区别 (2012-04-19 20:26:00) 标签: matlab fplot ezplot 数学函数 曲线 杂谈 函数plot 是绘制 ...

最新文章

  1. python嵌套循环执行顺序_两个嵌套for循环的执行顺序
  2. SAP S4HANA精华帖集锦
  3. 开启Windows8里面的Hyper-V虚拟机功能
  4. android 动态生成fragment,Android动态加载fragment(fragment复用)
  5. MYSQL中有时候不得不使用replace()去掉特殊字符,写在这里备用一下
  6. python 购物车程序_购物车程序python
  7. 我的世界java版种子多村庄_《我的世界》“村庄与掠夺”PE版种子推荐,出生点就7个村庄相连...
  8. Studio 3T使用教程,本人详细介绍连接Mongodb过程
  9. 自己动手写操作系统学习笔记(一)---MBR,PBR,BPB,文件系统
  10. Debian10.6 Xfce 系统安装教程
  11. 计算机检索自考,计算机信息检索02139自考资料(25页)-原创力文档
  12. 学计算机小学教师资格证,教师资格证我现在在一间小学教计算机,但现在 – 手机爱问...
  13. 蓝桥杯练习 小明上楼梯(递归设计)
  14. connection reset by peer
  15. 利用WireShark抓包进行数据分析
  16. 为了流量,何同学做了个“假B站”?
  17. 出bug就被甩锅?京东测试工程师教你如何避免
  18. 图_SimpleGraph
  19. 为什么要使用数据字典?(若依脚手架)
  20. 用python祝福父亲节_独特简短的父亲节祝福语,愿爸爸身体健康,一生平安!

热门文章

  1. 雷蛇灯光配置文件_没想到吧,雷蛇竟然出61键小尺寸机械键盘了!雷蛇猎魂光蛛迷你版上手...
  2. 欧拉函数/欧拉函数打表 lightoj1370(java/c++ )
  3. 操作系统之多线程编程—读者优先/写者优先详解
  4. C语言程序流程设计之跳转【程序流程设计】(14)
  5. Linux运维13款实用工具
  6. java中哪个是main函数的合法参数,Java试卷及答案
  7. 4/8 Serverless 技术实践营成都站持续报名中
  8. 水准网测量平差matlab_【干货】史诗级测量大神分享道路测量全过程经验
  9. java质因数算法_Java分解任意输入数的质因数算法的实现示例
  10. 线性表的C/C++实现(数据结构 严蔚敏版)