2012-04-05 107 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() {...});