一. 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的区别和使用的更多相关文章

  1. jquery中attr和prop的区别、 什么时候用 attr 什么时候用 prop (转自 芈老头 )

    jquery中attr和prop的区别. 什么时候用 attr 什么时候用 prop   在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这 ...

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

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

  3. jQuery中.attr()和.prop()的区别

    之前学习jQuery的时候,学习到了两种取得标签的属性值的方法:一种是elemJobj.attr(),另一种是elemJobj.prop().而在学习JS的时候,只有一种方法elemObj.getAt ...

  4. jquery中attr和prop的区别(转)

    在网络上看到这样一篇关于jquery中attr和prop的区别文章,觉得不错,所以转载了. 在jQuery 1.6中,.attr()方法查询那些没有设置的属性,则会返回一个undefined.如果你要 ...

  5. jq里attr和prop的区别

    jquery中attr和prop的区别   在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答 ...

  6. 【JAVAWEB学习笔记】21_多条件查询、attr和prop的区别和分页的实现

    今天主要学习了数据库的多条件查询.attr和prop的区别和分页的实现 一.实现多条件查询 public List<Product> findProductListByCondition( ...

  7. Jquery中attr 和 prop的区别和联系

    昨天在选择借款方类型的时候总是会出现选择要点两次的现象,比如点击公司,第一次点击选择公司,没有选中,必须在次点击才可以选中,总感觉是有点延迟加载的意思,后来审查元素, 发现是redio元素,这样的话就 ...

  8. jquery中attr和prop的区别分析

    这篇文章主要介绍了jquery中attr和prop的区别分析的相关资料,需要的朋友可以参考下 在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别 ...

  9. tips:Jquery的attr和prop的区别

    Jquery的attr和prop的区别 描述:想做一个复选框checkbox全选的功能,当勾选全选后,将子项的复选框状态设置成一致的, 但遇到了一个问题,就是attr函数并不能改变子项的checkbo ...

  10. Jquery学习笔记(6)--jquery中attr和prop的区别【精辟】

    jquery中attr和prop的区别 在高版本的jquery引入prop方法后,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?这些问题就出现了. 关于它们两个的区别,网上的答案很 ...

随机推荐

  1. Data of Ch5 --Dual rotor

    * Results *Conclusion*- little effect of rear rotor on Cp_1- Cp1 is independent of TI** TI effect on ...

  2. ASP.NET获取客户端IP及MAC地址

    朋友最近问如何获取客户端IP及MAC地址,一直想把这段给整理一下,契机来了:下边分为了C#后台获取的方法和前台Javascript(调用ActiveX)获取的方法,大家如果有好的方法一起讨论撒O(∩_ ...

  3. 《C语言程序设计(第四版)》阅读心得(一)

    本篇开始写我个人觉得谭浩强老师的<C语言程序设计(第四版)>中之前没有认识到,或者忘了的知识.因为本科学过,所以有些简单的东西就没有放进来了,所以可能并不是太全面. 第一章程序设计与语言 ...

  4. 看板娘 & 二次元 & live2d

    live2d https://l2dwidget.js.org/dev.html https://github.com/xiazeyu/live2d-widget.js 看板娘 要切换看板娘吗? ht ...

  5. poj 3667 Hotel (线段树的合并操作)

    Hotel The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a ...

  6. KSQL日期字段访问

    日期常量用法 KSQL中用日期常量必须用{ts'" + dateTime.ToString("yyyy-M-d HH:mm:ss") + "'} 正确写法: I ...

  7. 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.

    瞧见没有,就因为多了这一个反斜杠,浪费了一下午时间找问题,哭了~~~~

  8. hiho一下 第四十九周 欧拉路

    http://hihocoder.com/contest/hiho49/problem/1 给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,该条路称为欧拉路. 一个无向图存在欧拉路当且仅当 ...

  9. nyoj_10_skiing_201405181748

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当 ...

  10. Delphi:校验手机号及身份证号

    //校验手机号  function IsMobileNumber( num:string ):boolean;   begin     Result:=False;     if length( tr ...