我在以下代码中收到上述标题中的错误:
$j(".table").delegate('td','click', function(e) {
//alert($j(this).parent().css('background-color'));
if ($j(this).parent().css('background-color') == 'transparent')
$j(this).parent().css('background-color') = '#eee';
else {
$j(this).parent().css('background-color') = 'transparent';
}
});
我不明白为什么我会收到此错误,因为我已确保使用赋值运算符==
来比较字符串
答案 0 :(得分:2)
您的问题有2个问题:第一个问题已经answered by @Mike Vranckx,.css()
setter的正确用法是传递第二个参数设置为值。
另一个问题是你的情况永远不会成真,我将在这个答案中解决它。如果你按我建议的方式修复它,你就不会需要.css()
。
getComputedStyle
/ jQuery .css()
返回的Computed CSS values并不完全是您在代码中创作的内容 - 它们在解析时会遭受转换进入CSSOM。
例如,在Chrome中:
body { background-color: transparent; }
console.log( $('body').css('background-color') ); //returns "rgba(0, 0, 0, 0)"
这就是为什么$(...).('background-color') == 'transparent'
条件总是错误的。
最干净和跨浏览器的解决方案是在类(.addClass()
,removeClass()
,toggleClass()
)上应用样式,并使用.hasClass()
进行条件检查。
在你的情况下,.toggleClass
应该足够了。这是编写逻辑的简单方法(fiddle):
$j(".table").on('click', 'td', function() {
$j(this).parent().toggleClass('bg-gray');
});
.bg-gray {
background: #eee;
}
答案 1 :(得分:1)
要设置/更改 background-color 属性,您需要将其作为第二个参数传递:
$j(this).parent().css('background-color', '#eee');
答案 2 :(得分:0)
使用背景颜色进行比较时更好地使用rgba这样
$j(this).parent().css('background-color', 'rgb(0,0,0)');
答案 3 :(得分:0)
要为css赋值,请将该值作为第二个参数传递 以下行将更改为
$j(this).parent().css('background-color') = '#eee';
以下行
$j(this).parent().css('background-color','#eee');
答案 4 :(得分:0)
使用CSS类会更干净,更快速,更容易修改:
.table td { background-color: transparent; }
.foo { background-color: #EEE; }
和
$j( '.table' ).delegate( 'td', 'click', function() {
$( this ).toggleClass( 'foo' );
});
同时避免使用像“table”这样的保留字来表示类名,这很令人困惑。