2011-11-19 2 views
0

일부 요소를 반복하면서 아래 요소와 같이 요소에 li 태그가있는 자식 (grandchild?)이 있는지 확인해야합니다. li 요소는 ID가 다를 수 있으므로 참조하지는 않습니다. 저는 현재 li 요소를 반복하고 있는데, "a"태그 어린이가 있기 때문에 항상 아이들을 검사하면 true를 반환합니다. 단지 'lil'태그 어린이를 확인하고 싶습니다. 여기 요소에 X 태그가있는 자식 요소가 있는지 확인합니다.

  <ul id="navMenu"> 
       <li id="home"><a href="#home" rel="ajax">Home</a></li> 
       <li id="information"><a href="#information" rel="ajax">Information</a> 
        <ul> 
         <li><a href="#credits" rel="ajax">Credits</a></li> 
         <li><a href="#lorem_ipsum" rel="ajax">Lorem Ipsum</a></li> 
        </ul> 
       </li> 
       <li id="contact"><a href="#contact" rel="ajax">Contact</a></li> 
      </ul> 

 $('#test').load('../common.html #navMenu', function() { 
      $.each($("#test #navMenu li"), function(i,v) { 
       var theElement = $(v); 
       if ($(theElement).children('li')){ 
        alert('This Element has children'); 
       } 
      }); 
     }); 

이 비어의 경우에도,

답변

1

$(theElement).children('li')는 항상 if 절을 전달하는의 jQuery 객체를 반환, 다시 한 번 토드을 주셔서 감사합니다 ... 내가 지금 무엇을 가지고 .

.find.children은 손자가 아닌 직접 자식을 반환하기 때문에 필요합니다.

그래서 :

if ($(theElement).find('li').length > 0) { 

나 :

if ($(theElement).find('li').length) { 
// 0 won't pass an if clause, and all other numbers will, so you can eliminate `> 0` 
+0

쿨 팁 : v.each에 전달 된 요소 중 하나에 대한 참조 인 경우

어쨌든, 당신은 함께 위의 모든 대체 할 수있다 뒤늦은 지경에서 아주 분명합니다. – maddogandnoriko

2

당신은 시도 할 수 -

$('#test').load('../common.html #navMenu', function() { 
    $.each($("#test #navMenu li"), function(i,v) { 
     var theElement = $(v); 
     if ($(theElement).find('li').length > 0){ 
      alert('This Element has children'); 
     } 
    }); 
}); 

find 만 한 수준 아래로 검색 children보다 현재 요소에 깊이 이동합니다.

+0

완벽하게 작동합니다. 그리고 새로운 기능인 "발견하다"를 발견했습니다. – maddogandnoriko

0

당신은 또한 당신의 쿼리에 여분의 리튬을 추가 할 수 있습니다 : "#test #navMenu 리튬 리튬"을 감안할 때

+0

부모 요소를 반복 할 필요가 있습니다. – maddogandnoriko

1

을 :

> var theElement = $(v); 
> if ($(theElement).children('li')) { 
> alert('This Element has children'); 
> } 

하지 $(v) 돌려 주어의 jQuery 객체를합니까? 따라서 $(theElement)은 중복됩니다. 절은, 보이는 경우를 통과하지 약 0

if (v.getElementsByTagName('li').length) { 
    /* v has li descendants */ 
] 
+0

고마워, 네가 맞다면, theElement는 불필요하고 그것을 제거했다. 이것은 또한 아주 잘 작동합니다. 나는 내가 어느 것을 사용할 지 확신하지 못한다. 그러나 그들에게서 배울뿐 아니라, 대안을 보는 것이 항상 좋다. – maddogandnoriko

관련 문제