2011-09-16 7 views
1

내가 다음 예제를 가지고있다 : http://jsfiddle.net/LAMdV/

HTML :

<div id="imageSlider"> 
    <span class="info" id="info1"> 
     hello world 
    </span> 
</div> 

jQuery를 :

$('#imageSlider .info').click(function() { 
    var i = $(this).attr('id'); 
    i = i.replace('info', ''); 

    if ($('#imageSliders .info#info' + i).is(':visible')) {  
     alert("hide"); 
    } else { 
     alert("show"); 
    } 
}); 

은 왜이다 is:visible의 결과는 항상 거짓입니까? 사실에도 불구하고 그것은 처음부터 볼 수 있습니다! (내 실제 시나리오에서는 이전에 숨겨져 표시되었습니다.)

+1

@Ates Goral이 대답을주었습니다. 그러나 ID는 고유해야하기 때문에'$ ('# imageSliders .info # info'+ i)'를 할 필요가 없습니다. 그러므로, $ ('# info'+ i)'를 사용하는 것이 훨씬 더 깔끔하고 빠릅니다. 왜냐하면'$ (this)'가 이미 당신이 찾고있는 요소이기 때문에 필요 없을 것입니다. – Shef

+0

금요일 오후의 블루스가 자리 잡고 있다고 생각해 주셔서 감사합니다. 일주일이 끝났다고 말할 수 있습니다! 나는 그것을 1 분 안에 대답으로 표시 하겠지만 지금은 할 수 없습니다. 귀하의 다른 조언을 주셔서 감사합니다. – Chris

답변

5

선택자에서 "#imageSliders"(복수형)를 사용하는 동안 마크 업에 "imageSlider"id가 있습니다.

2

id가 imageSlider이고 jQuery에 #imageSliders (plural)가 있기 때문일 수 있습니다.

1

구문이 혼동되었습니다.

if ($('#imageSliders .info#info' + i).is(':visible')) { ... } 

클래스 이름은 ID 뒤에 참조됩니다. ID가 가장 빠른 선택이다 그러나 그래서 그냥이 함수에 있기 때문에

if ($('#info' + i).is(':visible')) { ... } 

그러나 전화를 그냥 때 더 설명하기 위해 this

if ($(this).is(':visible')) { ... } 

를 사용할 수있는 기본 선택으로 정보 {수}를 얻을 이드와 결합 된 클래스를 사용합니다. 페이지에서 클래스가 활성화되어 장식 될 수있는 ID의 예를 보겠습니다.

$("#uniqueid") 

$("#uniqueid.active") 
0

대 그것은 그들도이다. imageSliders는 imageSlider 여야합니다.

관련 문제