-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;、2番目を削除してくださいi++。あなたも評価を必要としません。

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

決してevalを使用しない場合、ただし仮想的にevalを使用する 場合(自己交差)、jQueryオブジェクトではなく、評価するJavascriptの文字列を引数として使用することに注意してください。

于 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-childsであるによって参照されるオブジェクトになります。例えば

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 に答える