1. 程式人生 > >Jquery中attr與prop的區別詳解

Jquery中attr與prop的區別詳解

當點選左上方那個checkBox時,要將下面的checkBox全部選中,我們的程式碼是這樣的

$("input[name='checkbox']").attr("checked",true);

然並卵,一點效果都沒有,後來換成這樣,好了

$(function(){
 $("#all").click(function(){
  if($("#all").prop("checked")){
   $("input[name='checkbox']").prop("checked",true);
  }else{
   $("input[name='checkbox']").prop("checked",false);
  }
 });
});

於是上官方的文件查了下attr和prop的區別,發現根本看不懂,如下圖

於是,我們做了個實驗

c1:<input id="c1" name="checkbox" type="checkbox" checked="checked" /></br>
c2:<input id="c2" name="checkbox" type="checkbox" checked=true/></br>
c3:<input id="c3" name="checkbox" type="checkbox" checked=""/></br>
c4:<input id="c4" name="checkbox" type="checkbox" checked/></br>
c5:<input id="c5" name="checkbox" type="checkbox" /></br>
c6:<input id="c6" name="checkbox" type="checkbox" checked=false/></br>
 
 var a1=$("#c1").attr("checked");
 var a2=$("#c2").attr("checked");
 var a3=$("#c3").attr("checked");
 var a4=$("#c4").attr("checked");
 var a5=$("#c5").attr("checked");
 var a6=$("#c6").attr("checked");
 
 var p1=$("#c1").prop("checked");
 var p2=$("#c2").prop("checked");
 var p3=$("#c3").prop("checked");
 var p4=$("#c4").prop("checked");
 var p5=$("#c5").prop("checked");
 var p6=$("#c6").prop("checked");
 
 console.log("a1:"+a1);
 console.log("a2:"+a2);
 console.log("a3:"+a3);
 console.log("a4:"+a4);
 console.log("a5:"+a5);
 console.log("a6:"+a6);
 
 console.log("p1:"+p1);
 console.log("p2:"+p2);
 console.log("p3:"+p3);
 console.log("p4:"+p4);
 console.log("p5:"+p5);
 console.log("p6:"+p6);

結果是這樣的(chrome)

發現attr的返回值要麼是checked要麼是undefined,prop的返回值只有true和false。

經過在網上搜素和測試總結

prop()函式的結果:

      1.如果有相應的屬性,返回指定屬性值。

      2.如果沒有相應的屬性,返回值是空字串。

attr()函式的結果:

      1.如果有相應的屬性,返回指定屬性值。

      2.如果沒有相應的屬性,返回值是undefined。

對於HTML元素本身就帶有的固有屬性,在處理時,使用prop方法。

對於HTML元素我們自己自定義的DOM屬性,在處理時,使用attr方法。

具有 true 和 false 兩個屬性的屬性,如 checked, selected 或者 disabled 使用prop()