1. 程式人生 > >jQuery中prop和attr區別

jQuery中prop和attr區別

元素 pro cti height 設置 let 數字 由於 led

問題

  今天給一個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:false3     disabled:false4     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區別