2011-06-14 18 views

回答

7

他們最終都在檢查同樣的事情。

如果您使用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的膽量。

+0

.is(':checked')讀得更好,除非你驗證(時間+努力)沒有jQuery正在解決的瀏覽器差異,那麼它也更安全。最近有人做了一篇毫無意義的文章,稱jquerySet [0] .checked速度快了100倍,但我們正在談論超級微型優化,以實現零收益並降低可讀性。 – 2011-06-14 07:24:03

+0

+1正是我想說的更少的話:) – alex 2011-06-14 07:24:14

+0

@mattcodes:同意微優化,實際上我只是添加了一個關於這個答案的答案。但是,您的瀏覽器不同點,'checked' DOM元素屬性是可靠的跨瀏覽器,這是您絕對可以信賴的。你說得對,還有其他的東西(大部分是通過'attr'訪問的)並不可靠。 – 2011-06-14 07:30:00

1

我自己會使用prop('checked')(只要我不必支持較早的jQuery版本),因爲它直接訪問對象的checked屬性,並且很容易閱讀。

is(':checked')運行了一些額外的開銷與字符串解析等。我通常保留:checked選擇元素。

相關問題