2014-02-17 83 views
3

我有一个简单的JQuery语句...我的问题是,为什么在这个世界中有一个失败?为什么这个变量不能在JQuery中正确传递

让我们假设变量colorAttributecolor

$(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

谢谢大家谁这么快回答!我希望我能接受你所有的答案...... – VIDesignz

回答

5

那是因为你不能用一个变量对象文本指定一个名称。

对象文字中的标识符可以用引号或不用引号来编写,所以在任何情况下它都不会被解释为变量。对象将结束与标识符指定:

{ "colorAttribute" : '#'+hex } 

您可以使用一个变量来设置对象的属性,但你必须先创建对象,并用括号语法:

var obj = {}; 
obj[colorAttribute] = '#'+hex; 
$(thisCLass).css(obj); 
+0

好的,这个答案对我来说最有意义......理解标识符可以用引号或不用引号来解释这个问题。我认为这个值可以是一个变量,因为它可以作为一个变量来处理这个值。 – VIDesignz

+0

@VIDesignz:是的,值可以是任何表达式。 – Guffa

4

它不起作用,因为你根本无法在JavaScript中做到这一点。在对象文字中,属性声明的左侧是字符串文字或标识符。如果它是一个标识符,那么标识符本身被用作,就好像它是一个字符串文字。因为第二个为对象只有一个属性

var cssProps = {}; 
cssProps[colorAttribute] = '#' + hex; 
$(thisClass).css(cssProps); 
4

:“colorAttribute”

但是,您可以创建一个对象,并且从变量填充的属性。

你应该这样做:

myobj = {}; 
myobj[collorAttribute] = "#"+hex; 
$(thisClass).css(myobj); 

也许你是一个Python程序员,但是JavaScript是不是这样的关于类型的字典(对象这里)。它经常发生。

4

对象文字/初始化程序仅为其名称使用标识符键,而不是将它们表示为变量的任何值。所以......

{ colorAttribute: '#' + hex } 

...定义与命名"colorAttribute"关键的Object

你将不得不使用括号符号来命名基于变量的关键:

var css = {}; 
css[colorAttribute] = '#' + hex; 
$(thisClass).css(css); 
3

你不能声明一个JavaScript对象字面值与属性名称的变量。文字中的属性名称必须是实际的属性名称,而不是变量。

相反,如果你想使用对象形式的变量,你必须首先构建一个对象,然后通过它在:

var obj = {}; 
obj[colorAttribute] = '#'+hex; 
$(thisCLass).css(obj); 
2

当你在做{ colorAttribute : '#'+hex }要创建一个新的具有名为“colorAttribute”的属性的对象。

我不知道到底你需要什么,但你可以尝试

var cssObject = {}; 
cssObject[colorAttribute] = '#'+hex; 
//cssObject[otherAttribute] = 'otherValue'; 
$(thisCLass).css(cssObject); 

希望这是有帮助的。

2

你需要写什么你想在这里做之前步:

首先创建一个变量:

var color = new Object(); 
color.colorAttribute = '#'+hex 

$(thisCLass).css(color); 
相关问题