关于JQuery中$().attr()与$().prop()的区别

来源:互联网 发布:知乎似乎出了点问题 编辑:程序博客网 时间:2024/04/28 22:02

前段时间,在写公司项目时,用$('checkboxId').attr('check',true)<input type='checkbox'>设置选中时,碰到了这种情况:jQuery明明已经给input设置了选中状态,可等页面渲染出来后,input标签的状态仍然是未选中的状态。
input对象中checked状态一直是false
后来,在网上查阅了相关资料,终于用这篇博客中提到的办法

http://www.biweb.cn/blog/detail.php/id-21.html
改用$('checkboxId').prop('check',true),成功解决了问题。

那么,为什么用$().attr()不能成功选中,用$().prop()却可以成功选中呢?于是,我再次翻阅了jquery的api文档,终于知道了问题所在,下面就对这两个方法的相同点和不同点做出分析:
## 相同点 ##
这两个方法,都可以改变DOM元素的属性值

<code>$().attr()</code>设值后
 <code>$().prop()</code>设值后
## 不同点 ##
这两个方法,给DOM设置属性时,属性的位置有一点区别:
$().attr()是针对DOM对象上的attributes设置属性,而$().prop()是针对DOM对象设置属性。也就是说,$().attr()仅仅改变的是DOM对象上attributes这个属性,而$().prop()改变的是DOM对象。
<code>$().attr()</code>设置属性
<code>$().prop()</code>设值后
本文最开始也提到了,真正能够操作checkbox选中的是DOM对象上的checked属性——将它设置成checked=true,页面元素就变成选中状态,而并非DOM对象上attributes属性里的checked属性,所以,我们用$.attr()设置如checked这类属性有可能不成功,这时候选择$.prop()可能更合适点。但说到这里,仍然有个问题,始终有点无法理解——用$.attr()设置如checked这类属性有时候会成功,如果有人能够解释下这个问题就好了!!

ps:第一次写博客,可能有些细节写的不够好,以后会慢慢改进!

0 0
原创粉丝点击