2012-08-09 124 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/