***起因***

之前寫過jQuery的val()跟text()概念時,提過因為剛接觸jQuery是直接下場實作...前人種樹後人跟著種樹(?),知其然而不知所以然XD

後來才慢慢把概念補上,其中一個就是attr()跟prop()。

一開始多是使用attr(),但在幾次發現無法取到自己需要的值之後,才開始跟prop()打架。

那到底兩者具體區分為何呢? 利用今天來記述一下~

另外強調,必須是Jquery的元件才能使用以下jquery的方式取得屬性。

 


 

***attr & prop***

attr()是在 jQuery 1.0 版時就有的方法,直到 jQuery 1.6 時才加入prop()。

而兩者在字面上的意思都是"屬性",光是字面上判讀實在讓人摸不著頭緒。

但其實很簡單的分別是,attr()/attribute指的是Html元素上的屬性,普遍會看到的像是class、name跟等等(如下)

<input type="text" id="pen">

 

prop()/property則是在DOM tree上的屬性(看到有翻譯稱之為特性或DOM屬性)

image

因此attribute會是初始值,不會更改。而property會是可變的、動態的(dynamic)。

 

難怪以前常常遇到執行elem.attr('checked','checked')反覆幾次就沒有反應了XD

 


 

***結論***

如果在attribute跟property個別增加成員,會是不共通的。

image

 

且相較之下,prop的效能更高,因為attr需要訪問DOM屬性節點。

至於何時用attr,何時用prop...雖然因為歷史因素,某些狀況使用attr據說還是可以運作。但還是要考慮到語意與其定義(跟未來XD)

總之依照很多前輩的說法跟自己在開發的習慣,只要是true or false的,應該就都用prop囉~

(據說jQuery有提供一張attr / prop的使用對照表,還是有疑問的人能找找)

此外attr()跟prop()歷史上的小糾葛(ver1.6前後、1.6.1),在這邊就不詳述了~

有興趣的人歡迎參閱 : 

jQuery 1.6 筆記

jQuery 1.6 .attr() 和 .prop()

補充 :

在JavaScript,可以使用document.getElementById(elemID).value = '要修改的值',來設定property

document.getElementById(elemID).setAttribute('value', '要修改的值'),則修改Attribute 

 

 


 

資料來源 : 

HTML: The difference between attribute and property

jQuery 中 attr() 與 prop() 使用區別

JS中attr和prop屬性的區別以及優先選擇示例介紹

jQuery 1.6 筆記

jQuery 1.6.1上場救援,不用改寫attr()囉

[轉載] 屬性(Attribute)與特性(Property)

arrow
arrow
    創作者介紹
    創作者 律晴音 的頭像
    律晴音

    聆風之境

    律晴音 發表在 痞客邦 留言(0) 人氣()