我在某些元素上使用mouseenter
和mouseleave
事件來更改其外觀。我能這樣做使用以下兩種策略:動態添加和刪除元素樣式的最佳方式
$(this).css('someProperty','someValue')
添加,然後$(this).removeAttr('style')
刪除$(this).addClass('someClass')
添加,然後$(this).removeClass('someClass')
刪除
什麼是最好的方式這樣做?
我在某些元素上使用mouseenter
和mouseleave
事件來更改其外觀。我能這樣做使用以下兩種策略:動態添加和刪除元素樣式的最佳方式
$(this).css('someProperty','someValue')
添加,然後$(this).removeAttr('style')
刪除$(this).addClass('someClass')
添加,然後$(this).removeClass('someClass')
刪除什麼是最好的方式這樣做?
絕對選項2.樣式應該在樣式表中定義。
還有toggleClass
,它會刪除該類,如果它存在,但在缺失的情況下添加它。
注:toggleClass
也可以讓你在布爾通過作爲第二個參數,告訴它是否添加或刪除它(不管它目前擁有應用該類),所以:
$(this).toggleClass('active', true);
完全等同於:
$(this).addClass('active');
這是非常方便的,當你在你的代碼有一個布爾值了。因此,而不是這樣的:
if (isUserActive()) {
$(this).addClass('active');
} else {
$(this).addClass('active');
}
你可能只是這樣做:
$(this).toggleClass('active', isUserActive());
我強烈推薦addClass()
/removeClass()
,因爲你可以添加,刪除和更改屬性的整體裹以最小的jQuery 。
儘管css()
方法需要你,或者說腳本,來跟蹤什麼應該被改變,以反映的審美變化率(s)傳達程序互動,耦合,與attr()
方法和去除style
屬性將刪除全部樣式,即使那些你想要的元素保留,這就要求你重新分配這些屬性。
所以,基本上,選項2是有效的,選項1創建不必要的工作。
當然,總有toggleClass()
,這可以提高效率。
除非您需要動態生成任何CSS屬性值,否則您最好將樣式與javascript分離。所以使用類而不是直接的CSS樣式。
.addClass
和.removeClass
是最好的方式,因爲你可以用你的CSS改變你的變化...所以過了一段時間,你可以輕鬆地重新設計你的網站。
第二個是最好的,因爲通常風格將是不同的元素通用,它將通用和添加刪除相比,增加屬性一個接一個。
$(this).addClass('someClass') to add and then $(this).removeClass('someClass') to remove
如果您在多個元素中調用此函數,我建議您使用第二個元素。如果您以後需要再次更改外觀,那麼您只能在css類中編輯,而不是在所有元素中編輯。
我認爲是這樣,但不確定。 – user1032531
同意removeAttr,但http://stackoverflow.com/questions/4036857/jquery-remove-style-added-with-css-function喜歡它 – user1032531
隨着mouseenter/mouseleave(或懸停),是toggleClass()適當? – user1032531