2012-04-05 133 views
0

的孩子我有這個reqular ul>李結構選擇對象

<ul class='compare'> 
    <li>Level 1 
     <ul> 
      <li>Level 2</li> 
      <li>Level 2</li> 
      <li>Level 2</li> 
      <li>Level 2</li> 
     </ul> 
    </li> 
    <li>Level 1 
     <ul> 
      <li>Level 2</li> 
      <li>Level 2</li> 
      <li>Level 2</li> 
      <li>Level 2</li> 
     </ul> 
    </li> 
    <li>Level 1 
     <ul> 
      <li>Level 2</li> 
      <li>Level 2</li> 
      <li>Level 2</li> 
      <li>Level 2</li> 
     </ul> 
    </li> 
</ul> 

我用$("ul.compare > li").live(...);指定鼠標事件UL

的孩子,但現在我需要得到一個對象的子女。假設obj是我的$("ul.compare")

如果我這樣做$("li", obj).live(...)這會將事件分配給所有不僅孩子。

我可以這樣做,但我不喜歡它

obj.children("li").each(function() { 
    $(this).live(...); 
}); 

有沒有一種方法來選擇對象的所有兒童,直接塗抹live不使用.each()

+2

...你想做什麼? '$(「ul.compare> li」)。live(...);'?另請注意,從jQuery 1.7開始,'live()'已被折舊,以支持['on()'](http://api.jquery.com/on)。 – Matt 2012-04-05 08:50:54

+0

感謝live()警告。我試圖寫我的第一個插件,我只有這個'return this.each(function(){var o = options; var obj = $(this); ...});'so so can a id或者這個插件應用時的類名。之前有'.selector',但現在它消失了。 – Ergec 2012-04-05 09:01:26

+0

我很難確定您想要新解決方案。你想在'ul.compare'或其他東西中的任何'li'上觸發一個事件嗎? 'obj'選擇器是否被傳入? – 2012-04-05 09:19:09

回答

0

感謝@Matt,你似乎在不知不覺中回答了我的問題。解決辦法是.on()

雖然這是行不通的,我們必須使用.each()分配mouseover到每個匹配的元素

//obj.children("li").children("ul").children("li").live("mouseover", function() {...}); //Does not work 
obj.children("li").children("ul").children("li").each(function() { 
    $(this).live("mouseover", function() {...}); 
}); 

這部作品並沒有必要.each()

obj.children("li").children("ul").children("li").on("mouseover", function() {...});