prop()方法和attr()方法的區別

admin發表於2017-08-18

這兩個方法作用好像是一模一樣,其實絕大多數作用都是一樣,只有在一些特殊的情況下才有可能出現一些差異,下面就結合例項例項介紹一下在這兩個方法的區別。

先看一段程式碼例項:

[HTML] 純文字檢視 複製程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>prop()函式和attr()函式的區別-螞蟻部落</title>
<style type="text/css">
li{
  list-style-type:none;
  font-size:12px;
  color:blue;
  width:300px;
  height:20px;
  line-height:20px;
}
a{
  width:200px;
  height:20px;
  float:left;
}
.ck{
  float:left;
  width:26px;  
}
.time{
  color:red;
  width:60px;
  height:20px;
  float:right;
}
.do{
  font-size:12px;
}
</style>
<script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#myck").bind("click",function(){
  $('input[type=checkbox]').prop('checked',$(this).prop('checked'));
  if($(".do").text()=="全選"){
    $(".do").text("取消"); 
  }
  else{
    $(".do").text("全選"); 
  }
}) 
})  
</script> 
</head>
<body>
<div>
<ul>
  <li>
    <span class="ck"><input type="checkbox"/></span>
    <a href="#">螞蟻部落歡迎您</a>
    <span class="time">12-13</span>
  </li>
  <li>
    <span class="ck"><input type="checkbox"/></span>
    <a href="#">大家好,好久不見了</a>
    <span class="time">12-13</span>
  </li>
  <li>
    <span class="ck"><input type="checkbox"/></span>
    <a href="#">螞蟻部落</a>
    <span class="time">12-13</span>
  </li>       
</ul>
<div><input type="checkbox" id="myck"/><span class="do">全選</span></div>
</div> 
</body>
</html>

以上程式碼是非常常見的核取方塊的全選和全不選功能,在上面的程式碼中使用了prop()來獲取或設定核取方塊的checked屬性值。

但是如果將以下程式碼:

[JavaScript] 純文字檢視 複製程式碼
$('input[type=checkbox]').prop('checked',$(this).prop('checked'))

修改為:

[JavaScript] 純文字檢視 複製程式碼
$('input[type=checkbox]').prop('checked',$(this).attr('checked'))

這樣就不能實現我們想要的功能。下面簡單分析一下原因:

當使用attr()方法去獲取核取方塊的checked屬性值的時候,如果核取方塊被選中,那麼獲取的屬性值為checked,如果沒有選中獲取的屬性值就是undefined,自然也就無法實現我們想要的功能。prop()方法能夠很好的彌補attr()方法的不足,此方法統一返回true或false。

兩種方法的選擇:

有的瀏覽器只要寫disabled,checked就可以了,而有的要寫成disabled="disabled",checked="checked",比如用attr("checked")獲取checkbox的checked屬性時選中的時候可以取到值,值為"checked"但沒選中獲取值就是undefined。

兩種方法的選擇原則如下:

1.新增屬性名稱該屬性就會生效應該使用prop();

2.是有true,false兩個屬性使用prop();

3.其他則使用attr();

其實大可不必苛責,為了避免這些麻煩直接只是用prop()就好了。

相關文章