2011-11-19 110 views
0

我正在循環某些元素,並需要確定元素是否具有帶li標記的子元素(孫子?),如下面的信息元素中所示。 li元素在id中會有所不同,所以我沒有這樣引用它們。我目前正在循環閱讀li元素,如果我檢查孩子,它總是會返回true,因爲有「a」標記的孩子,我只想檢查'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')返回一個jQuery對象總是通過一個if條款,即使它是空的。因爲.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

酷尖端約0未通過if子句,似乎後見之明非常明顯。 – 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)是多餘的。

總之,如果是v傳遞給。每元件中的一個的引用,則可以用替換所有上述的:

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

謝謝你,你是對的,元素是多餘的,我已經刪除它。這也很好。我不確定我會使用哪一個,但是如果不是僅僅向他們學習,總能看到其他選擇。 – maddogandnoriko

相關問題