如何获得td颜色以便在第二次点击后改变颜色?
这是我的代码如下。我试图扭转已经做出的点击。这是发生在一个td标签。我在这里和其他论坛上结合了几个问题的失败实验。如何获得td颜色以便在第二次点击后改变颜色?
function changeColor(elem) {
if (elem.style.backgroundColor = "#5AD9C1" || "transparent") {
elem.style.backgroundColor = "#66FF66";
} else if (element.style.backgroundColor = "#66FF66") {
elem.style.backgroundColor = "#5AD9C1";
}
};
小心=和==
function changeColor(elem) {
if (elem.style.backgroundColor == "#5AD9C1" || elem.style.backgroundColor == "transparent") {
elem.style.backgroundColor = "#66FF66";
} else if (element.style.backgroundColor == "#66FF66") {
elem.style.backgroundColor = "#5AD9C1";
}
您应该使用一个类,以便它可以从一个样式表来维持。
.state2 {
background-color: #66FF66;
}
.state1{
background-color: #5AD9C1;
}
可能其中一个状态可能是多余的,应该应用于基本元素,以便您可以切换类。
如果您有jQuery的可使用以下命令:
if($element.hasClass('state1')) {
$element.removeClass('state1').addClass('state2');
else{
$element.removeClass('state2').addClass('state1');
}
以上可以提高了不少,特别是如果有一些例如HTML。
如果你没有使用jQuery你可以看的替代品或使用一些替代的奢侈: http://toddmotto.com/creating-jquery-style-functions-in-javascript-hasclass-addclass-removeclass-toggleclass/
编辑: 我也补充说,解决您的问题的答案。虽然我还是不建议这样做: http://jsfiddle.net/po16f5ec/4/
我也引用这篇文章为十六进制RGB: RGB to Hex and Hex to RGB
第一:
// With '=' you do assign a value to backgroundColor
if (elem.style.backgroundColor = "#5AD9C1" ...)
// Use '==' to check, if a equals b
if(elem.style.backgroundColor == "#5AD9C1" ...)
二:
你不能连锁如果这样的陈述:
if(myVar == 'A' || 'B' || 'C')
这是一样的询问(“B”),它总是真
你要做这样的:
if(myVar == 'A' || myVar == 'B' || myVAR == 'C')
有关详细信息有关if语句和运营商看到了https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else
正确的解决方法是:
function changeColor(elem) {
if (elem.style.backgroundColor == "#5AD9C1" || elem.style.backgroundColor == "transparent") {
elem.style.backgroundColor = "#66FF66";
} else if (element.style.backgroundColor == "#66FF66") {
elem.style.backgroundColor = "#5AD9C1";
}
}
编辑:
正如在评论中提到的,最主要的原因,这是行不通是因为风格。backgroundColor返回的颜色为RGB值
我发现this solution将rgb转换为十六进制。
许多浏览器,当然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');
});
当然,上面需要结合适当的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;
}
}
参考文献:
我明白你的意思了,我之前并不理解这一点,我查看了提供的链接。出现同样的问题会导致等号不一致。 – 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