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?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很 ...
随机推荐
- UVA 221 城市化地图(离散化思想)
题意: 给出若干个栋楼俯视图的坐标和面积,求从俯视图的南面(可以视为正视图)看过去到底能看到多少栋楼. 输入第一个n说明有n栋楼,然后输入5个实数(注意是实数),分别是楼的左下角坐标(x,y), 然后 ...
- ..net 3.5新特性之用this关键字为类添加扩展方法
具体用法如下: public static class ClassHelper { //用this 声明将要吧这个方法附加到Student对象 public static bool CheckName ...
- linux shell & man chmod
man chomd MBP xgqfrms-mbp:~ xgqfrms-mbp$ man chmod and entries will be removed regardless of their i ...
- [BZOJ3751][NOIP2014]解方程(数学相关+乱搞)
题目描述 已知多项式方程: a0+a1x+a2x^2+..+anx^n=0 求这个方程在[1, m ] 内的整数解(n 和m 均为正整数) 输入输出格式 输入格式: 输入文件名为equation .i ...
- 更新数据库中数据时出现: Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences 问题
使用workbench在数据库中更新数据时报错: You are using safe update mode and you tried to update a table without a WH ...
- 对于事务ACID的理解
ACID,即以下四点: 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. 一致性(Consistency) 事务前后数据的完整性必须保持一致 ...
- 条款三:尽量用new和delete而不用malloc和free
malloc和free(及其变体)会产生问题的原因在于它们太简单:他们不知道构造函数和析构函数. 假设用两种方法给一个包含10个string对象的数组分配空间,一个用malloc,另一个用new: s ...
- 条款十六: 在operator=中对所有数据成员赋值
当涉及到继承时,派生类的赋值运算符也必须处理它的基类成员的赋值!否则,当派生类对象向另一个派生类对象赋值时,只有派生类部分赋值了.看看下面: class base { public: ): x(ini ...
- 【剑指Offer面试题】 九度OJ1385:重建二叉树
题目链接地址: pid=1385">http://ac.jobdu.com/problem.php?pid=1385 题目1385:重建二叉树 时间限制:1 秒内存限制:32 兆特殊判 ...
- Installation error: INSTALL_FAILED_VERSION_DOWNGRADE Android
我们在安装新的 APk 的时候.会出现 Installation error: INSTALL_FAILED_VERSION_DOWNGRADE 原因: 是由于 androidversionCode ...