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?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很 ...
 
随机推荐
- SQL-如何使用 MongoDB和PyMongo。
			
先决条件 在开始之前,请确保已经安装了 PyMongo 发行版. 在 Python shell 中,下面的代码应该在不引发异常的情况下运行: >>> import pymongo 假 ...
 - 程序包javax.servlet.http不存在
			
在maven test项目时,出现错误: java:[7,26] 程序包javax.servlet.http不存在 原因:pom.xml中未引入javax.servlert-api相关的包 <d ...
 - Jbox 弹出窗口 子页面操作完成后关闭 父页面刷新
			
父页面js //父页面js <script> var isFreshFlag = '1'; //添加会议活动 function addMeetingAct(){ var attendVip ...
 - Leetcode 211.添加与搜索单词
			
添加与搜索单词 设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字 ...
 - 开车旅行(codevs 1199)
			
题目描述 Description 小A 和小B决定利用假期外出旅行,他们将想去的城市从1到N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i的海拔高度为Hi, ...
 - 主席树初探--BZOJ2588: Spoj 10628. Count on a tree
			
n<=100000的点权树,有m<=100000个询问,每次问两个点间的第k小点权,保证有解,强制在线. 主席上树啦!类似于之前的序列不带修改询问的前缀表示法,现在只要把前缀当成某点到根的 ...
 - 【SQL Server 学习系列】-- 随机生成日期时间的SQL脚本
			
DECLARE @dt1 DATETIME,@dt2 DATETIME,@a BIGINT,@b BIGINT SET @dt1='2010-01-01'--开始日期 SET @dt2='2010-0 ...
 - Errors running builder 'JavaScript Validator' on
			
eclipse编译提示Errors running builder 'JavaScript Validator' on 解决方法见下图 去掉 'JavaScript Validator' 即可
 - 【nginx】nginx与apache的优缺点比较
			
参考: http://zyan.cc/nginx_php_v6/ nginx相对于apache的优点: 1.轻量级,同样的web 服务,比apache服务器占用更少的内存及资源 2.抗并发,nginx ...
 - 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场  C
			
偶尔碰到这题,简单数位DP题,然而我已生疏了…… 这次算是重新想到的,看来对DP的理解有增进了…… dp[i][j][k],表示前i为,mod为j,是否出现2.3.5的剩下的数位可组成的数字.答案就是 ...