2012-10-28 177 views
2

我在某些元素上使用mouseentermouseleave事件來更改其外觀。我能這樣做使用以下兩種策略:動態添加和刪除元素樣式的最佳方式

  1. $(this).css('someProperty','someValue')添加,然後$(this).removeAttr('style')刪除
  2. $(this).addClass('someClass')添加,然後$(this).removeClass('someClass')刪除

什麼是最好的方式這樣做?

回答

5

絕對選項2.樣式應該在樣式表中定義。

還有toggleClass,它會刪除該類,如果它存在,但在缺失的情況下添加它。


注:toggleClass也可以讓你在布爾通過作爲第二個參數,告訴它是否添加或刪除它(不管它目前擁有應用該類),所以:

$(this).toggleClass('active', true); 

完全等同於:

$(this).addClass('active'); 

這是非常方便的,當你在你的代碼有一個布爾值了。因此,而不是這樣的:

if (isUserActive()) { 
    $(this).addClass('active'); 
} else { 
    $(this).addClass('active'); 
} 

你可能只是這樣做:

$(this).toggleClass('active', isUserActive()); 
+0

我認爲是這樣,但不確定。 – user1032531

+0

同意removeAttr,但http://stackoverflow.com/questions/4036857/jquery-remove-style-added-with-css-function喜歡它 – user1032531

+0

隨着mouseenter/mouseleave(或懸停),是toggleClass()適當? – user1032531

0

我強烈推薦addClass()/removeClass(),因爲你可以添加,刪除和更改屬性的整體裹以最小的jQuery 。

儘管css()方法需要你,或者說腳本,來跟蹤什麼應該被改變,以反映的審美變化率(s)傳達程序互動,耦合,與attr()方法和去除style屬性將刪除全部樣式,即使那些你想要的元素保留,這就要求你重新分配這些屬性。

所以,基本上,選項2是有效的,選項1創建不必要的工作。

當然,總有toggleClass(),這可以提高效率。

0

除非您需要動態生成任何CSS屬性值,否則您最好將樣式與javascript分離。所以使用類而不是直接的CSS樣式。

0

.addClass.removeClass是最好的方式,因爲你可以用你的CSS改變你的變化...所以過了一段時間,你可以輕鬆地重新設計你的網站。

1

選項2如果您必須在JavaScript中執行此操作,但對於現代瀏覽器,您可能能夠使用:hover僞類在CSS中完全實現。

+0

關於CSS的好處 – user1032531

0

第二個是最好的,因爲通常風格將是不同的元素通用,它將通用和添加刪除相比,增加屬性一個接一個。

$(this).addClass('someClass') to add and then $(this).removeClass('someClass') to remove 
0

如果您在多個元素中調用此函數,我建議您使用第二個元素。如果您以後需要再次更改外觀,那麼您只能在css類中編輯,而不是在所有元素中編輯。

相關問題