許多瀏覽器,當然Chrome和Firefox(來自體驗)返回的顏色格式爲rgb()
,而不是十六進制;不管它們的供應格式如何(#fff
,white
,hsl(0,100%,100%)
全部return rgb(255,255,255)
)。這就是說,如果你使用css類名,那麼你不需要擔心在特定顏色之間切換,或者如何補償特定瀏覽器返回這些顏色的變幻莫測。在普通的JavaScript,例如它很容易實現的一類變函數的實現相同的最終結果:
function toggleClass(elem, cssClassOn) {
var test = elem.classList.contains(cssClassOn);
elem.classList[ test ? 'remove' : 'add' ](cssClassOn);
}
document.getElementById('test').addEventListener('click', function (e) {
toggleClass(e.target, 'on');
});
JS Fiddle demo。
當然,上面需要結合適當的CSS樣式。
對於不執行Element.classList
API這些瀏覽器,一個簡單的辦法是:
function toggleClass(elem, cssClassOn) {
var currentClasses = elem.className,
test = currentClasses.indexOf(cssClassOn) > -1;
if (test) {
elem.className = currentClasses.replace(cssClassOn,'');
}
else {
elem.className += currentClasses + ' ' + cssClassOn;
}
}
JS Fiddle demo。
參考文獻:
我明白你的意思了,我之前並不理解這一點,我查看了提供的鏈接。出現同樣的問題會導致等號不一致。 – user3510681 2014-11-03 01:38:03
這不起作用的原因是因爲當你得到backgroundColor時,原生api會以rgb格式「rgb(102,100,208)」爲例返回一個字符串,而不是像你期望的那樣以十六進制格式。根據我的回答,我仍然強烈建議使用課程並給這些國家一個更有意義的價值。 – TysonWolker 2014-11-03 05:51:10
我編輯了我的答案,並添加了一個rgb到十六進制解決方案的鏈接。我總是忘了這種行爲,因爲我現在只使用jQuery :) – kair 2014-11-03 15:43:08