2013-05-20 34 views
-1

:雖然它可能是誘人的說,這是.prop() vs .attr()重複,我不相信這是後做了出色的工作解釋.prop().attr()但是當一個優選的不明確狀態之間的差異。這就是這個問題的目的所在)什麼時候最好使用`attr()`而不是`.prop()`?

儘管在StackOverflow上閱讀了關於.prop().attr()之間差異的一些問題/答案,但我仍然在這個問題上看到很多混淆。

我認爲在一個方法比另一個方法更可取的時候,在StackOverflow上有一個明確的引用是有用的,這樣我們就可以消除猜測並試圖找出某個屬性或屬性。

因此,請問,對於哪些屬性/特性是它優選使用.prop()和用於其.attr()

+2

找到答案在這裏在這裏http://stackoverflow.com/questions/5874652/prop-vs-attr[enter鏈接描述] [ 1]。 [1]:http://stackoverflow.com/questions/5874652/prop-vs-attr – AzAh

+2

@AzAh你沒有看過與他睜開問題的說明? – ajp15243

+2

@PalashMondal,是的,我在我的答案結尾處包含了jQuery參考鏈接。關鍵是要在StackOverflow上輕鬆搜索引用。 –

回答

8

適用之前 jQuery的1.9

下面是一些屬性和特性以及該方法獲取或設置它們時通常應該使用的列表。這是首選的用法,但.attr()方法將適用於所有情況。

+------------------------------------+------------+-----------+ 
| Attribute/Property     | .attr() | .prop() | 
+------------------------------------+------------+-----------+ 
| accesskey       | ✓  |   | 
| align        | ✓  |   | 
| async        |   | ✓  | 
| autofocus       |   | ✓  | 
| checked       |   | ✓  | 
| class        | ✓  |   | 
| contenteditable     | ✓  |   | 
| disabled       |   | ✓  | 
| draggable       | ✓  |   | 
| href        | ✓  |   | 
| id         | ✓  |   | 
| label        | ✓  |   | 
| location (i.e., window.location) |   | ✓  | 
| multiple       |   | ✓  | 
| readOnly       |   | ✓  | 
| rel        | ✓  |   | 
| selected       |   | ✓  | 
| src        | ✓  |   | 
| tabindex       | ✓  |   | 
| title        | ✓  |   | 
| type        | ✓  |   | 
| width (if needed over .width()) | ✓  |   | 
+------------------------------------+------------+-----------+ 

既不.attr()也不.prop()應該用於獲取/設置值。使用.val()方法來代替(但使用.attr(「value」, 「somevalue」)將工作

總結:.prop()方法應該用於布爾屬性/屬性和不以HTML(如window.location)所有其他屬性存在的所有屬性(那些你可以在HTML看)可以而且應該繼續與.attr()方法進行操作。

Reference

+2

_but了'.attr()'方法將在@undefined所有cases._號 – undefined

+0

工作,我是從jQuery的文檔引用。 –

+0

是的,只有在jQuery 1.6中才是如此。 – undefined

0

屬性和特性之間的差異可以在特定情況下非常重要的。jQuery的1.6,之前, .attr()方法在檢索某些屬性時有時會考慮屬性值,這可能會導致行爲不一致。從jQuery 1.6開始,.prop()方法提供了顯式檢索屬性值的方法,而.attr()檢索屬性。

例如,selectedIndex,tagName,nodeName,nodeType,ownerDocument,defaultChecked和defaultSelected應該檢索並使用.prop()方法進行設置。在jQuery 1.6之前,這些屬性可以使用.attr()方法檢索,但這不屬於attr範圍。這些沒有相應的屬性,只是屬性。

關於布爾屬性,考慮HTML標記定義的DOM元素,並且假設它是在一個名爲ELEM一個JavaScript變量:

elem.checked真(布爾)將與複選框狀態 $改變( ELEM)。丙(「選中」)爲真(布爾值)是否將與複選框狀態

elem.getAttribute改變(「檢查」)「檢查」(字符串)的複選框的初始狀態;不改變 $(ELEM).attr( 「選中」)(1.6) 「選中」(字符串)複選框的初始狀態;不會改變

$(elem).attr(「checked」)(1.6.1+)「checked」(String)將隨複選框狀態變化 $(elem).attr(「checked」)(pre- 1.6),真(布爾)與複選框狀態改變

SOURCE

相關問題