2012-04-05 22 views
0

Ich habe diese reqular ul> li StrukturAuswählen Kinder eines Objekts

<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> 

Ich benutze $("ul.compare > li").live(...); Mausereignisse Kinder ul

Aber jetzt brauche ich zuweisen Kinder eines Objekts zu erhalten. Lassen Sie sich sagen obj ist mein $("ul.compare")

Wenn ich das $("li", obj).live(...) mag, weist das Ereignis allen li nicht nur Kinder zu.

Ich kann auf diese Weise tun, aber ich mag es nicht

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

Gibt es eine Möglichkeit, alle Kinder ein Objekt auszuwählen und anzuwenden live direkt ohne .each() zu verwenden?

+2

... Was versuchst du zu machen? Was ist los mit '$ (" ulcompare> li "). Live (...);'? Beachten Sie auch, dass 'live()' ab jQuery 1.7 zugunsten von ['on()'] (http://api.jquery.com/on) abgeschrieben wurde. – Matt

+0

Danke für Live() Warnung. Ich versuche, mein erstes Plugin zu schreiben und ich habe nur dieses 'return this.each (function() {var o = Optionen; var obj = $ (this); ...});' so kann selector eine ID sein oder ein Klassenname, wenn dieses Plugin angewendet wurde. Vorher gab es '.selector' aber jetzt ist es weg. – Ergec

+0

Ich habe Schwierigkeiten zu bestimmen, was die neue Lösung sein soll. Möchtest du, dass ein Event auf einem 'li' im' ul.compare' oder etwas anderem ausgelöst wird? Ist 'obj' ein Selektor, der übergeben wird? –

Antwort

0

Dank @Matt, es scheint, dass Sie meine Frage mit Ihrem Kommentar unwissentlich beantwortet. Lösung ist .on()

Während dies nicht funktioniert, und wir haben .each() verwenden mouseover jedes verglichene Element zuweisen

//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() {...}); 
}); 

das funktioniert und es gibt keine Notwendigkeit .each()

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