如何将其压缩成循环并动态命名变量?
这工作
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;
});
答案 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;
});
myLocation ==
更改为myLocation =
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
引用的对象,其中包含属性b1
,b2
和b3
,这些属性是相关的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++;
}