2012-11-03 4 views
-2

어떻게 이것을 루프에 집어 넣고 변수 이름을 동적으로 지정할 수 있습니까?

이이 나던자바 스크립트에서 동적으로 변수 이름을 지정하십시오.

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

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)'); 

작동 버튼을

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

'eval' 사용 피하기 –

+0

'b1', 'b2' 등의 목표는 무엇입니까? 두 가지 예에서 모두 덮어 쓴 것입니다. –

+0

전체 코드를 다시 디자인 할 수 있다고 생각합니다.'.click' 줄은 거의 동일합니다. – pimvdb

답변

1

이 질문에서 이야기하기가 어렵습니다,하지만 당신이 찾고 있던 무엇을 궁금해 :

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

특성 b1을 가지고 aMainNav하여 위의 객체가 참조됩니다의 최종 결과 , b2b3이며, 이는 nth-child이다. 예 :

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

...은 .mainNav li:nth-child(2)으로 변합니다.

+0

예, 물건을 찾고있었습니다! 이 작업은 결국'var aMainNav = {}; var n, j; (n = 0; n <3; n ++)에 대한 { \tj = n + 1; aMainNav [n] = $ ('.mainNav li : n 번째 자식 ('+ j +') '); } ' –

+0

숫자 인덱스 ('n'이 '0'에서 '2'일 때 'aMainNav [n]')을 사용하는 이유가 궁금합니다. 'b1','b2' 등 어디로 갔습니까? 그러나 만약 당신이 그것을하고 싶다면,'aMainNav'는 평범한 객체 일 필요는 없습니다 (아무런 해가 없지만). 당신이 원하면 배열이 될 수 있습니다. 어느 쪽이든. –

+0

나는 2 개의 다른 아이디어가 혼란스러워했다. –

2

var j = ++i;을 시도하고 두 번째 i++를 제거 클릭합니다. 당신은 평가가 필요조차하지 않습니다.

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

는 평가 사용하지,하지만했다 가설 경우, 평가를 (자기 교차) 사용은 자바 스크립트의 문자열을 평가하는 인수가 아닌 jQuery를 개체로 걸리는 것을 기억하는 것이 절대로 경우합니다.

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. 에 대한

    는 모든 mainNav li 아이를 선택하는 것처럼 대신 jQuery를 객체
  2. 변화 myLocation == 사용자 aMainNav.join()
  3. myLocation =의 문자열을 보유 할 배열을 수정 집단.
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++; 
} 
관련 문제