为什么这个jquery不起作用?

时间:2010-11-22 18:47:41

标签: jquery css children

        if($('.navigation ul li ul').children().length === 1) {
            $('.navigation ul li ul li a').css({opacity:0.5});
        }
        else {
            $('.navigation ul li ul li:first-child a').addClass('first');
            $('.navigation ul li ul li:last-child a').addClass('last');
        }

基本上我想要它,所以如果导航有一个<li>,那么除了在无序列表中有超过1 <li>之外,它还可以做其他事情。

示例HTML:

<nav id="nav" class="navigation"><!--Start Navigation-->          
    <ul> 
        <li><a href="#">Sample Linkk</a>
            <ul>
                <li><a href="#">1 DropDown Item</a></li>
            </ul>
        </li>
        <li><a href="#">Sample Link 2</a>
            <ul>
                <li><a href="#">2 DropDown Items</a></li>
                <li><a href="#">2 DropDown Items</a></li>
            </ul>
        </li>
    </ul>
 </nav>

6 个答案:

答案 0 :(得分:4)

$('.navigation ul li ul').each(function(){
   if($(this).children().length === 1){
      $(this).find('a').css({opacity:0.5});
   }else{
      $('li:first a', $(this)).addClass('first');
      $('li:last a', $(this)).addClass('last');
   }
});

没有测试过,但我认为它会起作用

答案 1 :(得分:4)

如果您在代码中放置以下警告,则会显示其找到三个孩子

alert($('.navigation ul li ul').children().length)

并且,基于您指定的选择器是正确的。您基本上要求jQuery查找符合该条件的所有节点,并且有两个节点符合该条件(总共有三个子节点)

每个函数都可以解决这个问题,因为对于每个“.navigation ul li ul”,它会查看它的子节点,此时你可以完全控制看看有多少个孩子并完成剩下的工作。

$('.navigation ul li ul').each(function(){
  if($(this).children().length === 1){
    $(this).find('a').css({opacity:0.5});
  }else{
    $('li:first a', $(this)).addClass('first');
    $('li:last a', $(this)).addClass('last');
  }
 });

答案 2 :(得分:1)

你现在说导航的ul是一个带有ul的li,只有1个孩子,而不是你想要的下面的内容。另外我认为==就够了..

逻辑上不起作用:

你说的是:

如果至少有一个$('.navigation ul li ul')只有1个孩子,那么对于所有$('.navigation ul li ul li a')个元素(因此不仅是属于if条件中的匹配的元素)执行不透明度的事情。< / p>

在应用操作之前,您必须先分离元素。

答案 3 :(得分:1)

你错过了.each吗?

 $('.navigation ul li ul').each(function(){
      if ($(this).children().length == 1) {
          // do A
      } else {
          // do B
      }
 });

答案 4 :(得分:0)

看看当你做这样的事情时会发生什么:

console.log( $("#nav ul li ul").children() );

你将所有的li集中到一​​个jQuery对象中。这不是你想要的我想不到的。

尝试this

之类的内容

答案 5 :(得分:0)

你需要迭代你可能的匹配,否则你应用一次。

$('.navigation ul li').each(function(){


if($(this).children('ul').children('li').length === 1) {
            $(this).children('ul').children('li').children('a').css({opacity:0.5});
        }
        else {
            $(this).children('ul').children('li:first-child').children('a').addClass('first');
            $(this).children('ul').children('li:last-child').children(
              'a').addClass('last');
        }
});

是的,它很乱,但我今天感觉不舒服