attr(全稱爲attribute),prop(全稱爲property),二者均可以翻譯爲屬性,爲了區分兩者,有些中文文檔將前者翻譯爲特性,後者翻譯爲屬性。簡單地說,attr表示HTML標籤的屬性,而prop表示DOM對象的屬性。兩者從本質上來講是不同的,但它們經常被混爲一談,部分緣由在於DOM對象的屬性大多與其所對應的HTML屬性同名,好比id,href,type,但也有不一樣,好比DOM對象中有className屬性,而HTML標籤中有class屬性。 在jquery的在早期版本中,沒有區分出attr和prop,只有一個attr()。jQuery 1.6版本,提供了一個新的方法來獲取和設置屬性,這個方法這是prop()。在此以前,prop()的職能只能由attr()代爲行使。官方建議,對於只有true和false兩個值的屬性(如checked、selected、disabled等),應當使用prop()。若是你恰恰就不聽建議,就是要用attr(),那麼讓咱們看下有什麼後果(此處以checked爲例)。 這是HTML代碼: <input type="checkbox" id="check1"> <label for="check1">Check me</label> 這是jQuery代碼: $(function(){ $("input").change(function(){ console.log($(this).attr("checked")); console.log($(this).prop("checked")); }); }); 在不一樣的jquery版本下,有不一樣的輸出結果,以下面的表格所示:
分析: 從上面能夠看出,1.6版本以前,使用attr()能獲得正確的結果,而使用prop()會返回類型錯誤(由於該方法尚未被定義);從1.6.0版本起,attr()獲得的結果都不符合預期,而使用prop()能夠獲得正確的結果。能夠簡單地理解爲,從1.6.0版本起,attr()讓出了那些本不屬於本身的權力,而prop()得到了它的權力(這就像古代的攝政王要在皇帝大婚以後將皇權交回皇帝手中同樣)。所以,咱們仍是要遵循官方的建議,該用prop()的地方就不要再用attr()了。 總結: 應該用prop()獲取的屬性以下:async,autofocus,checked,location,multiple,readOnly,selected。 本文中部分觀點爲我的理解,不當之處,敬請批評指正 參考文檔:http://api.jquery.com/prop/