在javascript中动态命名变量

时间:2012-11-03 16:02:43

标签: javascript jquery

如何将其压缩成循环并动态命名变量?

这工作

var aMainNav = ['b1', 'b2', 'b3'];
aMainNav[0] = $('.mainNav li:nth-child(1)');
aMainNav[1] = $('.mainNav li:nth-child(2)');
aMainNav[2] = $('.mainNav li:nth-child(3)');

这不是

var aMainNav = ['b1', 'b2', 'b3'];
var i = 0;
while(i < aMainNav.length){
    var j = i++;
    eval(aMainNav[i] = $('.mainNav li:nth-child('+j+')'));
    i++;
}

,按钮点击

aMainNav[0].click(function(){
    myLocation=='abc'?top.location.href='https://mydomain.com?var=1':window.location.href='./';
    return false;
});
aMainNav[1].click(function(){
    myLocation=='abc'?top.location.href='https://mydomain.com?var=2':window.location.href='./';
    return false;
});
aMainNav[2].click(function(){
    myLocation=='abc'?top.location.href='https://mydomain.com?var=3':window.location.href='./';
    return false;
});

4 个答案:

答案 0 :(得分:2)

尝试var j = ++i;,然后删除第二个i++。你甚至不需要eval。

while(i < aMainNav.length){
    var j = ++i;
    aMainNav[i] = $('.mainNav li:nth-child('+j+')');
}

如果从不使用eval,但如果假设您使用eval(穿过self),请记住它需要一个Javascript字符串作为其参数来评估,不是jQuery对象。

答案 1 :(得分:2)

我会使用for循环,也避免使用eval

for (var i = 0; i < aMainNav.length; i++){
    aMainNav[i] = $('.mainNav li:nth-child('+ (i+1) +')');
}

和点击处理程序

for (var i = 0; i < aMainNav.length; i++){
    aMainNav[i] = '.mainNav li:nth-child('+ (i+1) +')';
}


$(aMainNav.join()).click(function(){
    myLocation = 'abc'?top.location.href='https://mydomain.com?var=' + $(this).index() + ' ':window.location.href='./';
    return false;
});
  1. 修改数组以保存字符串而不是jQuery对象
  2. myLocation ==更改为myLocation =
  3. 用户aMainNav.join(),因为它会选择所有mainNav li子元素。

答案 2 :(得分:1)

这个问题很难说清楚,但我想知道这是不是你想要的:

var aMainNav = {};
var n;
for (n = 1; n <= 3; ++n) {
    aMainNav['b' + n] = $('.mainNav li:nth-child(' n + ')');
}

上述最终结果将是aMainNav引用的对象,其中包含属性b1b2b3,这些属性是相关的nth-child秒。 E.g。

aMainNav.b2.css("color", green");

...会将.mainNav li:nth-child(2)变为绿色。

答案 3 :(得分:0)

尝试这样的事情。它只是附加到列表而不是直接声明索引点。如果你需要指定一个索引点,那就是字典的用途,所以你应该使用它而不是数组。

var aMainNav = ['b1', 'b2', 'b3'];
var i = 0;
while(i < aMainNav.length){
    var j = ++i;
    var item = $('.mainNav li:nth-child('+j+')'));
    aMainNav.push(item);
    i++;
}