许多浏览器,当然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