和.prop('checked')
都可用於測試複選框是否被選中。哪種方法來測試元素是否被選中更好? .is(':checked')或.prop('checked')
查詢查詢狀態這兩種方式有什麼有趣/重要的區別,還是幾乎只是個人偏好的問題?
和.prop('checked')
都可用於測試複選框是否被選中。哪種方法來測試元素是否被選中更好? .is(':checked')或.prop('checked')
查詢查詢狀態這兩種方式有什麼有趣/重要的區別,還是幾乎只是個人偏好的問題?
他們最終都在檢查同樣的事情。
如果您使用1.6.0或更高版本,prop('checked')
是最直接的jQuery方式。 jQuery不必解析和處理選擇器來確定要做什麼。 [下面的注意事項]
您也可以(從1.6.1開始)再次使用attr('checked')
,與1.5.x和更早的版本一樣。
或者你可以直接進入元素。假設x
的東西進行測試,如果你知道至少有一個元素匹配,則:
if (x[0].checked) { /* ... */ }
如果你不知道,想要對衝你的賭注:
if (x[0] && x[0].checked) { /* ... */ }
但是除非你真的在緊密循環中使用任何你覺得最容易閱讀的東西,因爲性能差異並不重要。我發現最後一個很容易閱讀,我知道它們非常快,所以我使用它們。但是,如果你發現他們很尷尬,那就用你最喜歡的東西。如果你喜歡它,使用is(':checked')
沒有什麼壞處,並且你沒有看到它的實際性能(這不太可能阻止,再次,某種緊密的循環)。
注:程度到prop
更直接比is
通過瀏覽器的不同而不同。 prop
不只是一個財產的直接檢查,它首先經歷了幾個層次的間接性;和is
不一定非常複雜:例如,在WebKit瀏覽器上,is
可以相當直接,因爲WebKit提供了一種功能來測試元素是否匹配選擇器,並且本地支持:checked
;在Firefox上(和,我懷疑,IE),is
結果巨大函數調用的數量,因爲這個看似簡單的選擇器通過Sizzle的膽量。
我自己會使用prop('checked')
(只要我不必支持較早的jQuery版本),因爲它直接訪問對象的checked
屬性,並且很容易閱讀。
is(':checked')
運行了一些額外的開銷與字符串解析等。我通常保留:checked
當選擇元素。
.is(':checked')讀得更好,除非你驗證(時間+努力)沒有jQuery正在解決的瀏覽器差異,那麼它也更安全。最近有人做了一篇毫無意義的文章,稱jquerySet [0] .checked速度快了100倍,但我們正在談論超級微型優化,以實現零收益並降低可讀性。 – 2011-06-14 07:24:03
+1正是我想說的更少的話:) – alex 2011-06-14 07:24:14
@mattcodes:同意微優化,實際上我只是添加了一個關於這個答案的答案。但是,您的瀏覽器不同點,'checked' DOM元素屬性是可靠的跨瀏覽器,這是您絕對可以信賴的。你說得對,還有其他的東西(大部分是通過'attr'訪問的)並不可靠。 – 2011-06-14 07:30:00