Jquery中attr和prop的區別
在高版本的jquery
引入prop
方法後,什麼時候該用prop
?什麼時候用attr
?它們兩個之間有什麼區別?這些問題就出現了。
關於它們兩個的區別,網上的答案很多。這裡談談我的心得,我的心得很簡單:
- 對於HTML元素本身就帶有的固有屬性,在處理時,使用
prop
方法。 - 對於HTML元素我們自己自定義的
DOM
屬性,在處理時,使用attr
方法。
上面的描述也許有點模糊,舉幾個例子就知道了。
<a href="http://www.baidu.com" target="_self" class="btn">百度</a>
這個例子裡<a>
元素的DOM
屬性有“href、target
和class
“,這些屬性就是<a>
元素本身就帶有的屬性,也是W3C
標準裡就包含有這幾個屬性,或者說在IDE
裡能夠智慧提示出的屬性,這些就叫做固有屬性。處理這些屬性時,建議使用prop
方法。
<a href="#" id="link1" action="delete">刪除</a>
這個例子裡<a>
元素的DOM
屬性有“href
、id
和action
”,很明顯,前兩個是固有屬性,而後面一個“action
”屬性是我們自己自定義上去的,<a>
元素本身是沒有這個屬性的。這種就是自定義的DOM
屬性。處理這些屬性時,建議使用attr
方法。使用prop
方法取值和設定屬性值時,都會返回undefined
值。
再舉一個例子:
<input id="chk1" type="checkbox" />是否可見
<input id="chk2" type="checkbox" checked="checked" />是否可見
像checkbox
,radio
和select
這樣的元素,選中屬性對應“checked
”和“selected
”,這些也屬於固有屬性,因此需要使用prop
方法去操作才能獲得正確的結果。
$("#chk1").prop("checked") == false
$("#chk2").prop("checked") == true
如果上面使用attr
方法,則會出現:
$("#chk1").attr("checked") == undefined
$("#chk2").attr("checked") == "checked"
全文完。
最近做專案的時候遇到了一個坑,浪費了將近一晚上的時間,原因就是有一個地方要改變checkbox
的狀態,當時我使用的是attr("checked", true)
來狀態,當時遇到的問題就是我在chrome
中執行正常,但是在微信開發者工具中執行出錯,無法完全得改變多選框的狀態,當時一直以為是程式碼的問題,於是就在程式碼上面找問題,找了挺久,然後也修改了很多,但是最後發現還是不行。
無奈的我去查詢資料,不找不知道,一找才發現,原來問題出現在這裡。在之前的JQuery
版本中,都是使用attr()
來訪問物件的屬性,比如取一個圖片的alt
屬性,就可以使用
$(".img").attr("alt");
但是在某些時候,比如訪問input
的disabled
屬性的時候就就會有些問題。在一些瀏覽器裡,只要寫了disabled
屬性就可以產生效果,但是在一些瀏覽器上就要寫
disabled="disabled"
才能產生效果。所以,從1.6版本開始,jQuery
提供新的方法prop()
來獲取這些屬性。使用Prop()
的時候,返回值是標準屬性:true/false
, 比如$("checkbox").prop('disabled')
,不會返回’disabled
‘或者“ ”,只會返回true/false
。
根據資料上的說明,我將attr("chedked", true)
改成了prop("disabled", true)
,然後再檢視效果,果然,問題解決了。我的天吶,這就是困擾了我一晚上的問題。
最後總結一下哪些屬性應該用attr()
訪問,哪些屬性應該使用prop()
訪問:
- 第一:只新增屬性名稱就可以使屬性生效的就應該使用
prop()
; - 第二:只存在
true/false
的屬性應該使用prop()
。
按照官方的說明,如果是設定disabled
和checked
這些屬性,應該使用prop()
方法,而不應該使用attr()
方法。
知識,總是要應用在實踐中才叫知識。
相關文章
- jquery中prop和attr的區別jQuery
- jquery prop和attr的區別jQuery
- jQuery實戰之 attr() 和 prop() 的區別jQuery
- 淺談jquery中prop()和attr()jQuery
- Checkbox點選多次失效原因,源於Jquery中.attr和.prop的區別jQuery
- jQuery的prop和attr方法比較jQuery
- jQuery中css()和attr()方法的區別jQueryCSS
- prop 和 attr 中的一些羞羞的事情
- getAttribute() 與 attr() 的區別
- jquery $(this) 和this的區別jQuery
- JQuery this和$(this)的區別jQuery
- JQuery中html()和val()的用法區別jQueryHTML
- XML和HTML的主要區別、 jQuery 能做什麼?JavaScript中的“=、==、===”區別?XMLHTMLjQueryJavaScript
- jQuery的html()和text()區別jQueryHTML
- jquery中append、prepend, before和after方法的區別jQueryAPP
- jQuery的AJAX請求中contentType和dataType的區別jQuery
- 使用jquery和使用框架的區別jQuery框架
- jquery中$.get()提交和$.post()提交有區別嗎?jQuery
- jQuery中onload與ready區別jQuery
- window.onload()函式和jQuery中的document.ready()區別函式jQuery
- jquery中dom節點操作方法empty和remove的區別jQueryREM
- jquery Promise和ES6 Promise的區別jQueryPromise
- docment.getelementbyid 和jquery裡的$(#'id')區別jQuery
- axios,Ajax,jQuery ajax,axios和fetch的區別iOSjQuery
- jquery中append()方法與after()方法的區別jQueryAPP
- JavaScript中for in 和for of的區別JavaScript
- Js中for in 和for of的區別JS
- mysql中!=和is not的區別MySql
- Python中is和==的區別Python
- JavaScript中==和===的區別JavaScript
- Linux中“>”和“>>”的區別Linux
- Python 中 is 和 == 的區別Python
- mysql中“ ‘ “和 “ ` “的區別MySql
- window.onload()函式和jQuery中的document.ready()有什麼區別?函式jQuery
- PHP 中的 -> 和 :: 的區別PHP
- jQuery基礎與js的區別jQueryJS
- java 中equals和==的區別Java
- SQL中where和on的區別SQL