attr 和 prop的区别和使用
一. attr和prop的区别
要想弄清楚attr和prop的区别,就要先搞清楚js中使用DOM方法获取设置属性和使用对象方法获取设置属性的区别。
在javascript中使用DOM方法设置获取属性值主要是依靠setAttribute和getAttribbute,而使用对象方法获取属性值主要是靠节点对象.属性名称。
那么这两种方法有什么不同?
1. 获取属性值
假设有这样的html代码:
<div id = 'id_div' class = 'class-div' a = 'aaa'>
那么首先使用getAttribute进行测试:
var div = document.getElementById('id_div');
console.log(div.getAttribute('id')); 结果是id_div
console.log(div.getAttribute('class')); 结果是class-div
console.log(div.getAttribute('a')); 结果是aaa
可见使用getAttribute,节点的固有属性和自定义属性都可以获取。
接下来使用对象方法进行测试:
var div = document.getElementById('id_div');
console.log(div.id); 结果是id_div
console.log(div.className); 结果是class-div
console.log(div.a); 结果是undefined
由此可见使用对象方法获取属性值的话,如果是节点的固有属性那么是可以获取到的,但是如果是自定义的属性,那么这样是获取不到的。
2. 设置属性值
首先使用setAttribute设置属性值。
var div = document.getElementById('id_div');
div.setAttribute('class','bbb');
console.log(div.getAttribute('class')); bbb
console.log(div.className); bbb
这短代码是用setAttribute设置了固有属性class的值,用两种方法获取class的值。结果是两者都能够获取到。
var div = document.getElementById('id_div');
div.setAttribute('b','bbb');
console.log(div.getAttribute('b')); bbb
console.log(div.b); undefined
这段代码是用setAttribute设置了一个自定义属性的值,结果显示使用对象方法不能够获取到属性的值。另外在html文档的结构中,我们也可以看到,属性b也出现在了html文档中。
然后我们使用对象方法设置属性值。
var div = document.getElementById('id_div');
div.className = 'bbb';
console.log(div.getAttribute('class')); bbb
console.log(div.className); bbb
结果是二者都是一样的结果。
var div = document.getElementById('id_div');
div.b = 'bbb';
console.log(div.getAttribute('b')); null
console.log(div.b); bbb
而对于使用对象方法设置属性值,此时使用DOM方法获取的值为null,而使用对象方法成功获取到bbb。看一下html文档,发现属性b并没有出现在html文档中。
最后我们在实验一下这样的代码
var div = document.getElementById('id_div');
div.b = 'bbb';
div.setAttribute('b','aaa');
console.log(div.getAttribute('b')); aaa
console.log(div.b); bbb
这段代码,我们分别都使用两种方法对一个自定义属性进行设置。结果显示,用两种方法获取的结果并不相同。
var div = document.getElementById('id_div');
div.className = 'bbb';
div.setAttribute('class','aaa');
console.log(div.getAttribute('class')); aaa
console.log(div.className); aaa
这段代码我们是用两种方法分别对固有属性class设置了不同的值,但是结果却显示的是最后修改的值。说明二者都影响了class。
之所以要区分这二者的区别,是因为,attr使用的就是DOM方法操作属性,而prop使用的是对象方法操作属性。因此也可知道二者的区别就是:attr对固有属性和自定义属性均可操作,而prop只能对固有属性进行操作(事实上也可以对自定义属性进行操作,但是自定义属性不能够影响到html文档)。因此当对固有属性进行操作的时候就是用prop,而对自定义属性进行操作的时候就用attr。
而对input 的checked,selected,disabled属性,由于prop使用的是布尔值进行操作,因此更加方便,所以这种情况,一般使用prop。另外prop还可以设置和返回一下的属性:tagName、selectedIndex、nodeName、nodeType、ownerDocument、defaultChecked和defaultSelected等。
attr 和 prop的区别和使用的更多相关文章
- jquery中attr和prop的区别、 什么时候用 attr 什么时候用 prop (转自 芈老头 )
jquery中attr和prop的区别. 什么时候用 attr 什么时候用 prop 在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这 ...
- 【jQuery 区别】attr()和prop()的区别
1>>> 今天实现一个 点击更新按钮 ,可以勾选上本行的的checkbox的功能: 使用代码: /** * updateproduct.htmls 更新 产品信息 */ $(docu ...
- jQuery中.attr()和.prop()的区别
之前学习jQuery的时候,学习到了两种取得标签的属性值的方法:一种是elemJobj.attr(),另一种是elemJobj.prop().而在学习JS的时候,只有一种方法elemObj.getAt ...
- jquery中attr和prop的区别(转)
在网络上看到这样一篇关于jquery中attr和prop的区别文章,觉得不错,所以转载了. 在jQuery 1.6中,.attr()方法查询那些没有设置的属性,则会返回一个undefined.如果你要 ...
- jq里attr和prop的区别
jquery中attr和prop的区别 在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答 ...
- 【JAVAWEB学习笔记】21_多条件查询、attr和prop的区别和分页的实现
今天主要学习了数据库的多条件查询.attr和prop的区别和分页的实现 一.实现多条件查询 public List<Product> findProductListByCondition( ...
- Jquery中attr 和 prop的区别和联系
昨天在选择借款方类型的时候总是会出现选择要点两次的现象,比如点击公司,第一次点击选择公司,没有选中,必须在次点击才可以选中,总感觉是有点延迟加载的意思,后来审查元素, 发现是redio元素,这样的话就 ...
- jquery中attr和prop的区别分析
这篇文章主要介绍了jquery中attr和prop的区别分析的相关资料,需要的朋友可以参考下 在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别 ...
- tips:Jquery的attr和prop的区别
Jquery的attr和prop的区别 描述:想做一个复选框checkbox全选的功能,当勾选全选后,将子项的复选框状态设置成一致的, 但遇到了一个问题,就是attr函数并不能改变子项的checkbo ...
- Jquery学习笔记(6)--jquery中attr和prop的区别【精辟】
jquery中attr和prop的区别 在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很 ...
随机推荐
- Data of Ch5 --Dual rotor
* Results *Conclusion*- little effect of rear rotor on Cp_1- Cp1 is independent of TI** TI effect on ...
- ASP.NET获取客户端IP及MAC地址
朋友最近问如何获取客户端IP及MAC地址,一直想把这段给整理一下,契机来了:下边分为了C#后台获取的方法和前台Javascript(调用ActiveX)获取的方法,大家如果有好的方法一起讨论撒O(∩_ ...
- 《C语言程序设计(第四版)》阅读心得(一)
本篇开始写我个人觉得谭浩强老师的<C语言程序设计(第四版)>中之前没有认识到,或者忘了的知识.因为本科学过,所以有些简单的东西就没有放进来了,所以可能并不是太全面. 第一章程序设计与语言 ...
- 看板娘 & 二次元 & live2d
live2d https://l2dwidget.js.org/dev.html https://github.com/xiazeyu/live2d-widget.js 看板娘 要切换看板娘吗? ht ...
- poj 3667 Hotel (线段树的合并操作)
Hotel The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a ...
- KSQL日期字段访问
日期常量用法 KSQL中用日期常量必须用{ts'" + dateTime.ToString("yyyy-M-d HH:mm:ss") + "'} 正确写法: I ...
- android源码mm时的编译错误no ruler to make target `out/target/common/obj/JAVA_LIBRARIES/xxxx/javalib.jar', needed by `out/target/common/obj/APPS/xxxx_intermediates/classes-full-debug.jar'. Stop.
瞧见没有,就因为多了这一个反斜杠,浪费了一下午时间找问题,哭了~~~~
- hiho一下 第四十九周 欧拉路
http://hihocoder.com/contest/hiho49/problem/1 给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,该条路称为欧拉路. 一个无向图存在欧拉路当且仅当 ...
- nyoj_10_skiing_201405181748
skiing 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当 ...
- Delphi:校验手机号及身份证号
//校验手机号 function IsMobileNumber( num:string ):boolean; begin Result:=False; if length( tr ...