jQuery中prop和attr區別
問題
今天給一個button加onclick事件,由於最後button根據需要轉成字符串,因此不能使用jQurey.click(),只能給button添加onclick屬性的方式。
於是,$button.prop("onclick", "invoke(1)"),但在瀏覽器中觀看結果時傻了,button根本沒有添加上onclick的屬性。
咦?我上個a標簽就是使用$a.prop("href", "javascript:invoke(1)"),而且正常運行,怎麽給button加onclick就不行了?
然後我試了一下,$button.attr("onclick", "invoke(1)");是可以得到正常結果的。
問題來了,為什麽有的使用prop有的卻需要使用attr?
prop與attr
prop()是 jQuery 1.6 開始新增了一個方法,官方建議具有 true 和 false 兩個屬性的屬性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()。
我們可以將attribute理解為“特性”,property理解為為“屬性”從而來區分倆者的差異。
如果把DOM元素看成是一個普通的Object對象,這個對象在其定義時就具有一些屬性(property),比如把select的option當做一個對象:
1 var option = {
2 selected:false,
3 disabled:false,
4 attributes:[],
5 ...
6 }
attribute是一個特性節點,每個DOM元素都有一個對應的attributes屬性來存放所有的attribute節點,它是一個類數組的容器。attributes的每個數字索引以名值對(name=”value”)的形式存放了一個attribute節點。而property就是一個屬性,是一個以名值對(name=”value”)的形式存放在Object中的屬性。
1 <a href="http://www.baidu.com" target="_self" class="btn">百度</a>
這個例子裏<a>元素的DOM屬性有“href、target和class",這些屬性就是<a>元素本身就帶有的屬性,也是W3C標準裏就包含有這幾個屬性,或者說在IDE裏能夠智能提示出的屬性,這些就叫做固有屬性。處理這些屬性時,建議使用prop方法。
1 <a href="#" id="link1" action="delete">刪除</a>
這個例子裏<a>元素的DOM屬性有“href、id和action”,很明顯,前兩個是固有屬性,而後面一個“action”屬性是我們自己自定義上去的,<a>元素本身是沒有這個屬性的。這種就是自定義的DOM屬性。處理這些屬性時,建議使用attr方法。
問題解答
根據上邊的介紹,我們來看一看html對於a標簽和button標簽的解釋
我們能夠明確的看到:
href為a標簽的屬性,應該使用prop來設置。
onclick不是button的屬性,應該使用attr來設置。
jQuery中prop和attr區別