jQuery中attr和prop

来源:互联网 发布:金投顾软件怎么样 编辑:程序博客网 时间:2024/06/05 00:35

原链接 http://www.jb51.net/article/76588.htm

大家都知道有的浏览器只要写disabled,checked就可以了,而有的要写成disabled = "disabled",checked="checked",比如用attr("checked")获取checkbox的checked属性时选中的时候可以取到值,值为"checked"但没选中获取值就是undefined。

jq提供新的方法“prop”来获取这些属性,就是来解决这个问题的,以前我们使用attr获取checked属性时返回"checked"和"",现在使用prop方法获取属性则统一返回true和false。

那么,什么时候使用attr(),什么时候使用prop()?1.添加属性名称该属性就会生效应该使用prop();2.是有true,false两个属性使用prop();3.其他则使用attr();

简单的来说就是:

对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。
对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。
上面的描述也许有点模糊,引用一些大神的博客内容加上我的测试,举几个例子就知道了。

 第一个例子:元素的固有属性以及自定义属性说明

<a href="http://www.baidu.com" target="_self" class="btn">百度</a>
 这个例子里<a>元素的DOM属性有“href、target和class",这些属性就是<a>元素本身就带有的属性,也是W3C标准里就包含有这几个属性,或者说在IDE里能够智能提示出的属性,这些就叫做固有属性。处理这些属性时,建议使用prop方法。

<a href="#" id="link1" action="delete">删除</a>
这个例子里<a>元素的DOM属性有“href、id和action”,很明显,前两个是固有属性,而后面一个“action”属性是我们自己自定义上去的,<a>元素本身是没有这个属性的。这种就是自定义的DOM属性。处理这些属性时,建议使用attr方法。使用prop方法取值和设置属性值时,都会返回undefined值。

第二个例子:prop()与attr()在表单应用上的区别

先来看一段用attr()方法代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html>
 <head>
  <metacharset="utf-8"/>
  <title> attr() vs prop()</title>
 </head>
 <body>
  <h3>用attr()判断是否选中</h3>
  <inputtype="checkbox"id="input01"/>我是第一个复选框A<br/>
  <inputtype="checkbox"id="input02"checked="checked"/>我是第二个复选框B<br/>
  <inputtype="button"id="button01"value="获取A的checked状态"/>
  <inputtype="button"id="button02"value="获取B的checked状态"/>
  <scriptsrc="js/jquery-1.11.0.js"type="text/javascript"charset="utf-8"></script>
  <scripttype="text/javascript">
   $(function(){
    $("#button01").click(function(){
     var $state01=$("#input01").attr("checked");
     alert($state01);
    })
    $("#button02").click(function(){
     var $state02=$("#input02").attr("checked");
     alert($state02);
    })
   })
  </script>
 </body>
</html>

上面这段程序的测试结果是:

从动态图可以看出来,用attr()获取不到用户选中的状态,它只返回表单的初始值。而且若没有明确有checked属性,它返回undefined!

 再来看一段用prop()方法代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!DOCTYPE html>
<html>
 <head>
  <metacharset="utf-8"/>
  <title> attr() vs prop()</title>
 </head>
 <body>
  <h3>用prop()判断是否选中</h3>
  <inputtype="checkbox"id="input01"/>我是第一个复选框A<br/>
  <inputtype="checkbox"id="input02"checked="checked"/>我是第二个复选框B<br/>
  <inputtype="button"id="button01"value="获取A的checked状态"/>
  <inputtype="button"id="button02"value="获取B的checked状态"/>
  <scriptsrc="js/jquery-1.11.0.js"type="text/javascript"charset="utf-8"></script>
  <scripttype="text/javascript">
   $(function(){
    $("#button01").click(function(){
     var $state01=$("#input01").prop("checked");
     alert($state01);
    })
    $("#button02").click(function(){
     var $state02=$("#input02").prop("checked");
     alert($state02);
    })
   })
  </script>
 </body>
</html>

上面这段程序的测试结果是:

从动态图可以看出来,用prop()可以实时获取用户的选中与取消操作状态。








原创粉丝点击