-2

我怎样才能将它压缩成一个循环并动态命名变量?

这行得通

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

4 回答 4

2

尝试var j = ++i;,并删除第二个i++。你甚至不需要评估。

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

如果从不使用 eval,但 如果假设您要使用 eval(交叉自我),请记住,它的参数是要评估的 Javascript 字符串,而不是 jQuery 对象。

于 2012-11-03T16:04:50.373 回答
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子元素。
于 2012-11-03T16:06:30.317 回答
1

从这个问题很难说,但我想知道这是否是你要找的:

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

上面的最终结果将是一个对象,aMainNav该对象具有属性b1b2,并且b3是相关nth-child的 s。例如

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

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

于 2012-11-03T16:08:10.597 回答
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++;
}
于 2012-11-03T16:08:20.847 回答