确定元素是否具有带X标记的子元素

问题描述:

我正在循环某些元素,并需要确定元素是否具有带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'); 
       } 
      }); 
     }); 

再次感谢你, 托德

$(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

你可以尝试 -

$('#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

你也可以添加额外的李来查询: “#TEST #navMenu李丽”

+0

我需要遍历父元素,我认为这会想念他们。 – maddogandnoriko

考虑:

> 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