2009-05-18 9 views
1

HTML-Code:Wie findet man die ID des nächsten oberen Elements mit spezifischem Klassennamen?

<div id="1" class="master"></div> 
<div id="2" class="slave"></div> 
<div id="3" class="slave"></div> 

<div id="4" class="master"></div> 
<div id="5" class="slave"></div> 
<div id="6" class="slave"></div> 

lassen Sie uns sagen, wir verwenden $ ('div')() klicken diese DIV-Elemente anklickbar zu machen.

$('div').click(function() { 
    var el = $(this); 
    var master_id = ???; 
    alert(master_id); 
}); 

Dann auf DIV-Elemente mit Klasse Klick auf " slave "müssen wir die ID des nächsten oberen DIV Elements mit der Klasse" master "alarmieren, also wenn wir auf DIV # 5 oder DIV # 6 klicken, alerts =" 4 "(DIV # 4), wenn DIV # 2 oder DIV # 3 - Warnungen = "1" (DIV # 1). Aber wie geht das? ;)

Antwort

2

Aktualisiert:

$('div').click(function() { 
    var el = $(this); 
    var master_id = el.prevAll('.master').attr('id'); 
    alert(master_id); 
}); 

Edit:
Sie können auch Filter verwenden, so dass, wenn Sie ein div mit calss 'Master' klicken, wird es das Ereignis nicht ausgelöst:

$('div').click(function(e) { 
    var el =$(this); 
    if (!el.is('.master')){ 
     var master_id = el.prevAll(".master").attr('id'); 
    alert(master_id); 
    } 
+0

am nächsten Querungen Eltern, es wird nicht ein Geschwisterelement als OP finden sucht zu tun. –

+1

Danke für Ihre Antwort. Leider meldet Ihre Implementierung "undefiniert", wenn Sie auf "Slave" DIV Elemente klicken, und ihre ID beim Anklicken von "Master" DIV Elementen. – Ken

+0

2 great_llama, kennst du die Lösung? – Ken

0

Ich dachte zuerst, prev würde tun, aber nach einigen Tests habe ich festgestellt, dass es nicht auf einem slave nicht direkt installiert funktioniert y nach einem anderen slave. Greifen das erste Spiel von prevAll funktionierte perfekt.

Demo: http://jsbin.com/ulipi

$('.slave').click(function() { 
    var el = $(this); 
    var master_id = $(el.prevAll('.master').get(0)).attr('id'); 
    alert(master_id); 
}); 
Verwandte Themen