如何计算没有ul的李?

时间:2010-05-05 09:07:56

标签: javascript jquery html

嗨我想要计算没有UL的LI,仅限第一级, 但是当我计算它时它显示大小4而不是2,它也计算内部LI。

<div class="navigation-container">
    <ul class="first-level">
      <li><a href="#">Link 1</a></li>
      <li><a href="#">Link 2</a>
        <ul>
          <li><a href="#">Link2.1</a></li>
          <li><a href="#">Link2.2</a>
            <ul>
                <li><a href="#">Link 2.2.1</a></li>
            </ul>
          </li>
        </ul>
      </li>
      <li><a href="#">Link </a></li>
    </ul>  
  </div>

jQuery for this。

jQuery(document).ready(function(){

  var nosubnav = jQuery('.first-level li:not(:has(ul))');
  var nosubnavsize = jQuery('.first-level li:not(:has(ul))').size();
  jQuery(nosubnav).css('border' , '1px solid red');
  alert('List item which does not have submenu  '+nosubnavsize);

});

JSBin上的测试link text的链接,

感谢

3 个答案:

答案 0 :(得分:11)

您可以使用子选择器>仅定位父项下的子元素。

jQuery(document).ready(function(){

  var nosubnav = jQuery('.first-level > li:not(:has(ul))');
  var nosubnavsize = jQuery('.first-level > li:not(:has(ul))').size();
  jQuery(nosubnav).css('border' , '1px solid red');
  alert('List item which does not have submenu  '+nosubnavsize);

});

这将返回2的计数。您还可以通过重复使用存储的目标li选择(存储在nosubnav中)来略微优化它:

jQuery(document).ready(function(){

  var nosubnav = jQuery('.first-level > li:not(:has(ul))');
  nosubnav.css('border' , '1px solid red');
  alert('List item which does not have submenu  '+nosubnav.length);

});

这将减少第二次查询DOM的开销。

答案 1 :(得分:9)

不确定我是否正确阅读,但是......

$('ul.first-level > li:not(:first)').length

为我返回2(see demo

答案 2 :(得分:4)

$('.first-level > li:not(:has(ul))').size()