2010-08-29 7 views
5

Ich habe folgenden:Delegate-Handler und Innen Kinder geklickt

<ul id ='foo'> 
    <li><p>hello</p></li> 
    <li><p>hello</p></li> 
    <li><p>hello</p></li> 
</ul> 

$('#foo').delegate('li', 'click', function(event) { 
    var target = $(event.target); 
    console.log(target); 
}); 

der Click-Handler, sowie die Eltern li Elemente wird immer dann, wenn einer der inneren p Elemente geklickt aufgerufen wird.

Wie kann ich einen Zeiger auf das übergeordnete li-Element erhalten, unabhängig davon, auf welches innere untergeordnete Element geklickt wurde? Zum Beispiel sehen meine wirkliche li-Elemente wie:

<li> 
    <p>one</p> 
    <div> 
    <p>two</p> 
    </div> 
</li> 

so zu finden bin ich, dass ich mehrere Kontrollen haben müssen bis zum Mutter li, um wieder auf die geklickt wurde. Gibt es eine Möglichkeit, nur die Eltern einen Typen auswählen wie:

$('#foo').delegate('li', 'click', function(event) { 
    var target = $(event.target).('li'); 
    console.log(target); // will always be parent li element itself? 
}); 

Dank

Antwort

2

in dem Handler, this zum li Elemente beziehen.

0

var target = $ (dies) sollte ein Weg sein - so mache ich es normalerweise. $ (event.target) .parents ("li") wäre ein anderes, aber Sie könnten mehr abholen, als Sie erwarten.

+0

das sollte "Eltern" sein, "Eltern" würden alle 'li's zurückgeben, wenn Sie' 's's für ein Menü zum Beispiel verschachteln. Das übergeordnete Element gibt nur das erste Element zurück, das mit dem Selektor übereinstimmt. – prodigitalson

+0

@prodigitson - Das ist nicht ganz richtig. Die Methode '.parent()' von jQuery sucht nur nach dem unmittelbaren Elternteil. Wenn Sie einen Selektor übergeben und das direkte übergeordnete Element nicht mit diesem übereinstimmt, erhalten Sie ein leeres jQuery-Objekt. – user113716