2013-03-26 3 views
0

이것은 아마도 단순한 것이지만 작동시키지 못한다.JQuery .hide ... 숨어 있지 않다.

나는 다음과 같은 코드가 있습니다 기본적으로

<ul> 
    <li class='jSH'>Users: <span>0</span></li> 
    <li class='jSH'>Cars: <span>1</span></li> 
</ul> 

, 나는 스팬 == 0의 내용이는 jQuery 코드 인 경우 리튬을 숨 깁니다 함수를 작성하려고하지만 그것은 작동하지 않습니다 어떤 이유로 :

if ($('.jSH span').text() == "0") 
    $(this).closest('li').hide(); 
    alert("should hide"); 

그래서,이 경우에, 나는 처음 리튬하지만, 리튬 (스팬 == 0의 내용이 있기 때문에) 숨기지 않습니다에 대한 하나의 경고를 얻을.

이 경우 'this'를 사용하는 데 문제가 있습니까?

감사합니다.

+0

? ;) 나쁜 문장 인 if 문장의 본문에'{'와'} '를 포함하지 않으므로 경고음이 항상 울리게됩니다. –

+0

자바 스크립트 발췌 문장의 위치는 어디입니까? jQuery 이벤트 핸들러 (예 : 클릭), 함수 또는 다른 곳에서 사용하고 있습니까? –

답변

3

.each 현재 코드가 여러 객체와 그 내용을 반환하기 때문에 .each은 개별 요소가 처리되는 루프 모양의 프로세스로 분리됩니다. 바이올린 : http://jsfiddle.net/fEEFq/
자바 스크립트 코드 :

$('.jSH span').each(function(){ 
     if ($(this).text() == "0"){ 
      $(this).closest('li').hide(); 
      alert("should hide"); 
     } 
    }); 
2

문제점은 $(this)입니다. jQuery의 컨텍스트에서 이벤트 콜백 (예 : mouseover 또는 클릭)에서만 작동합니다. 당신은 if 문의 몸 주위에 {}이없는, 또한

$('.jSH span').closest('li').hide(); 

: 당신은 그 라인을 수정해야합니다. 이렇게하면 if가 실행 된 후 첫 번째 명령문 만 실행됩니다.

1

당신이 원하는 결과를 반환하지 않습니다 조건문에 this을 참조하고 있습니다. 대신

:

$('.jSH span').each(function(){ 
    if ($(this).text() == "0"){ // now `this` is referring to every span in the jQuery collection 
     $(this).closest('li').hide(); 
    } 
}); 

http://api.jquery.com/each/

+0

완벽 - 페이지에 .jSH 클래스가 없으면 JQuery에서 오류가 발생합니까? –

+1

@Angelo, no. 그건 그렇지 않을거야. 컬렉션에 요소가 반환되지 않으면 무시됩니다. –

2

당신은 사용할 수 있습니다 정확히 this` 자바 스크립트에`에 대해 어떻게 생각하십니까 $ .filter

$('.jSH').filter(function() { 
    return $('span',this).text() == "0"; 
}).hide(); 
+0

+1'filter'를 사용하여 같은 예제를 추가하고 싶었습니다! –

+0

:) 고맙습니다 ... – PSL

관련 문제