jQuery if/else statements not working
jQuery的新手,我不明白为什么这小段代码无法正常工作。我将主体的背景设置为黑色,但始终返回else语句,并且背景变为橙色而不是所需的粉红色。
1 2 3 4 5 6 7 8 9 | $(document).ready(function(){ $("body").css("background","black"); if ($("body").css("background") =="black") { $("body").css("background","pink"); } else { $("body").css("background","orange"); } }); |
您可以在这里看到发生了什么:http://jsfiddle.net/jH6Y9/1/
您不能只要求复合的CSS样式,例如" background";该值返回为空字符串。要求"背景色"。 (编辑Firefox给了我空字符串;其他浏览器可能会为您构造整个组合的背景属性。)
现在,一旦解决了这个问题,您将发现报告的颜色不会是"黑色"。这将是其他表示"黑色"的颜色语法。
使用类代替:
,而不是依靠样式机制来跟踪正在发生的事情
1 2 3 4 5 | $("body").addClass("black"); if ($("body").hasClass("black")) $("body").addClass("pink"); else $("body").addClass("orange"); |
然后在您的CSS中:
1 2 3 | body.black { background-color: black; } body.pink { background-color: pink; } body.orange { background-color: orange; } |
更好的是,对页面状态使用一些有意义的语义名称,而不是颜色名称,这样,如果您以后改变主意并希望将背景从狗变成小猫,代码仍然有意义。
css'background'为您提供了完整的背景参数,看起来像:
1 | "rgb(0,0,0) none repeat scroll..." |
如果只想检查颜色,则需要指定想要的color属性,并针对它实际使用的值进行测试,而不是实际要测试rgb颜色值,而不是" black":
1 | if ($('body').css("background-color") =="rgb(0, 0, 0)") |
修复很简单。
1 2 3 4 5 6 7 8 9 10 | $(document).ready(function(){ $("body").css("background-color","black"); console.log($("body").css("background-color")) if ($("body").css("background-color") =="rgb(0, 0, 0)") { $("body").css("background-color","pink"); } else { $("body").css("background-color","orange"); } }); |
小提琴