2011-04-21 2 views
17

나는 다음과 같은 섹션이있는 테이블이() ">"아이 선택기 대 다음 TR 요소로 설정JQuery와 : 어린이

<tr> 
    <td> <span class="myclass"></span> 
    </td> 
<tr> 

내 $ (이) 내가 노력하고있어 "myclass"클래스가 설정된 Span 요소에 액세스합니다. 다음은 작동하는 것 같다 :

if ($(this).children('td').children('span').is('.myclass')){ 
    alert('in here'); 
} 

을하지만 사용하려고 할 때 :

if ($(this).children("td > span").is('.myclass')){ 

나이 :

if ($(this).children("td span").is('.myclass')){ 

을 그렇지 않습니다. 나는 위의 2 중 하나가 유사한 결과를 내놓을 것이라고 생각했지만 (다른 방법을 통해 임에도 불구하고) 분명히 그렇지 않았습니다.

무엇이 여기에 있습니까?

감사합니다.

답변

19

children(selector)selector과 일치하는 아이들과 일치합니다. tr의 자식 (td 초) 중 어느 것도 과 일치 할 수 없으므로 tr에는 span 자식 요소가없고 단지 tdtd > span !== td이 있습니다.

documentation

는 이것에 대해 매우 분명하다

선택적으로 선택에 의해 필터링 일치하는 요소의 세트에 각 요소의 아이를 가져옵니다.


은 당신이 대신 할 수 있습니다 것은 .find()입니다 :

$(this).find("td > span") 

그것은 셀렉터에 일치하는 모든 자손뿐만 아니라 아이들을 반환합니다.

0

설명 : here.

차이점은 첫 번째 선택기가 완전히 children 호출 내에 있고 두 번째 선택기가 완전히 호출되지 않는 것입니다.

그러므로 첫 번째 어린이는 과 일치하는 this의 모든 아동을 찾습니다.

두 번째는 다음을 모두 찾아 this의 모든 <td> 아이를 발견 할 것이다 (즉, (선택기 모든 {<td><span>의 아이들}) this의 직접 아이들 스스로됩니다) 그 중 <td><span>가 있습니다.

1
JQuery와 문서에서

:

는 ".find()와.후자는 DOM 트리 아래 하나의 레벨을 이동하는 것을 제외하고 아이들은() 메서드와 유사하다 "

나는이 사용하는 것이 좋습니다 것 :.

if ($(this).find('.myclass').length){ 
    alert('in here'); 
} 

건배를