2012-08-09 123 views
1

好球员,如许,这里是真正的交易,首先使样品的html:如何选择嵌套两个.each()函数的多个元素?

<li data-foo="bar"> 
    <span id="a"></span> 
    <ul> 
     <li> 
      <span id="1"></span> 
      <ul> 
       <li> 
        <span id="b"></span> 
       </li> 
      </ul> 
     </li> 

     <li> 
      <span id="2"></span> 
      <ul> 
       <li> 
        <span id="c"></span> 
       </li> 
      </ul> 
     </li> 

    </ul> 

</li> 

<li data-foo="bar"> 
    <span id="d"></span> 
    <ul> 
     <li> 
      <span id="3"></span> 
      <ul> 
       <li> 
        <span id="e"></span> 
       </li> 
      </ul> 
     </li> 

     <li> 
      <span id="4"></span> 
      <ul> 
       <li> 
        <span id="f"></span> 
       </li> 
      </ul> 
     </li> 

    </ul> 

</li> 

我想要得到的窗口弹出“12”,这时会弹出“34” ...所以这里我嵌套函数尝试:

<script> 
    var poptext = ""; 

    $('li[data-foo=bar]').each(

    function() { 

     $(this li span).each(function() { 
      poptext = poptext + $(this).attr("id"); 
     } 

     alert(poptext); 
     poptext = ""; 

     ); 

    } 

    ); 
</script> 

这似乎并不奏效,我认为jQuery的可能糊涂了多个“这个”关键字?此外,这些跨度的选择器可能会出现问题。

谢谢你们!

回答

1

我认为你正在寻找的嫡系选择:>

像这样来使用:

$('li[data-foo=bar]').each(function() { 
    var poptext = "";   
    $(this).find('> ul > li > span').each(function() { 
     poptext = poptext + $(this).attr("id"); 
    }); 
    alert(poptext); 
}); 

将只选择那些在左侧以前表达的直接子节点。

更详细的,但也许阅读的版本可能是:

$(this).children('ul').children('li').children('span') // selects the same 

看到它在这里的行动:http://jsfiddle.net/xYgJg/

+0

谢谢!像魅力一样工作! – eastboundr 2012-08-09 22:48:49

1

你在你的代码中有语法错误,$(this li span)应该是$('li span', this)你的逻辑关闭了,你没有用字母id过滤出跨度。

+0

感谢指点出来。是的,我不知道如何达到这些确切点。这些跨度应该位于根li的下三级。 (LI> UL> LI> SPAN) – eastboundr 2012-08-09 19:54:07

0

您有这行语法错误:

$(this li span).each(function() { 

“这个“是”each“循环中的当前dom元素,所以一种方法是可以将它包装在一个jQuery对象中并调用”.find()“并传入另一个选择器以获取所需的嵌套元素

此外,获取您正在寻找的答案的逻辑是不正确的。我不知道你正在努力寻找到底是什么,但这里是让你正在寻找

var poptext = "", 
    id; 

$('li[data-foo=bar]').each(function() { 
    $(this).find('li span').each(function() { 
     id = $(this).attr("id"); 
     if (!isNaN(id)){ 
      poptext = poptext + $(this).attr("id"); 
     } 
    }); 

    alert(poptext); 
    poptext = ""; 

}); 

答案一种方法这里是发挥的jsfiddle:http://jsfiddle.net/kEjt7/1/