我有一个简单的JQuery声明......我的问题是,为什么世界上其中一个会失败?
让我们假设变量colorAttribute
是color
$(thisCLass).css( "color", '#'+hex ); // Works when written
$(thisCLass).css( colorAttribute, '#'+hex ); // Works with variable
$(thisCLass).css({ "color" : '#'+hex }); // Works when written
$(thisCLass).css({ colorAttribute : '#'+hex }); // Does not Work with variable
关于为什么会失败的任何想法?
答案 0 :(得分:5)
那是因为你不能使用变量来指定对象文字中的名字。
对象文字中的标识符可以使用或不使用引号编写,因此在任何一种情况下都不会将其解释为变量。该对象最终将使用您指定的标识符:
{ "colorAttribute" : '#'+hex }
您可以使用变量在对象中设置属性,但是您必须先创建对象并使用括号语法:
var obj = {};
obj[colorAttribute] = '#'+hex;
$(thisCLass).css(obj);
答案 1 :(得分:4)
它无法正常工作,因为您无法在JavaScript中执行此操作。在对象文字中,属性声明的左侧是字符串文字或标识符。如果它是一个标识符,则标识符本身使用,就好像它是一个字符串文字。
您可以创建一个对象,然后从变量填充属性:
var cssProps = {};
cssProps[colorAttribute] = '#' + hex;
$(thisClass).css(cssProps);
答案 2 :(得分:4)
因为第二个成为只有一个属性的对象:“colorAttribute”。
你应该这样做:
myobj = {};
myobj[collorAttribute] = "#"+hex;
$(thisClass).css(myobj);
也许你是一个python程序员,但javascript与dicts(这里的对象)不一样。它经常发生。
答案 3 :(得分:4)
对象文字/初始值设定项仅为其名称使用标识符键,而不是它们可能表示为变量的任何值。所以......
{ colorAttribute: '#' + hex }
...使用名为Object
的密钥定义"colorAttribute"
。
您必须使用括号表示法根据变量命名键:
var css = {};
css[colorAttribute] = '#' + hex;
$(thisClass).css(css);
答案 4 :(得分:3)
您不能使用属性名称的变量声明javascript对象文字。文字中的属性名称必须是实际的属性名称,而不是变量。
相反,如果要在对象表单中使用变量,则必须先构造对象,然后将其传入:
var obj = {};
obj[colorAttribute] = '#'+hex;
$(thisCLass).css(obj);
答案 5 :(得分:2)
当您执行{ colorAttribute : '#'+hex }
时,您正在使用名为“colorAttribute”的属性创建一个新对象。
我不确切知道你需要什么,但你可以试试
var cssObject = {};
cssObject[colorAttribute] = '#'+hex;
//cssObject[otherAttribute] = 'otherValue';
$(thisCLass).css(cssObject);
希望这有用。
答案 6 :(得分:2)
在写下你想要做的事情之前,你需要一步:
首先创建一个变量:
var color = new Object();
color.colorAttribute = '#'+hex
$(thisCLass).css(color);