JQuery: voriges Element einer Klasse selektieren

Hallo Profis,

ausgehend von einem Element $(this) möchte ich das nächstvorige Element einer bestimmten Klasse finden. Konkret habe ich

und möchte bei Klick auf die .KlasseB-Checkbox die vorige .KlasseA-Checkbox checked setzen. All die hierzu empfohlenen Tipps (https://groups.google.com/forum/?fromgroups=#!topic/…, http://stackoverflow.com/questions/3331849/jquery-fi…) funktionieren bei mir nicht. Was muß ich tun?

Vielen Dank und einen schönen Abend
JayKay

Hallo,

Hallo Profis,

bin kein JavaScript Profi, ich versuchs aber trotzdem mal.

ausgehend von einem Element $(this) möchte ich das
nächstvorige Element einer bestimmten Klasse finden.
Konkret
habe ich

und möchte bei Klick auf die .KlasseB-Checkbox die vorige
.KlasseA-Checkbox checked setzen. All die hierzu empfohlenen
Tipps

Die Links verwenden .prevAll(), das findet alle Vorgänger auf gleicher Ebene (mit gemeinsamem Eltern-Element), das input-Element hat aber keine „Geschwister“.

Du kannst aber durch alle input-Elemente laufen und das letzte vor dem auslösenden verwenden:

 $('#trigger').click(function() {

 var allInputs = $('table input');
 var last;
 for(var i=0; i\<allInputs.length; i++) {
 if(allInputs[i] === $(this)[0] && last) {
 $(last).attr('checked', 'checked');
 } else if($(allInputs[i]).attr('class') === 'KlasseA') {
 last = allInputs[i];
 }
 }

 });

HTH
Heavy

P.S.: ich gehe davon aus es gibt mehrere Checkboxen der KlasseA, sonst wäre es etwas einfacher mit $(‚input.KlasseA‘).attr(‚checked‘, ‚checked‘);

Funktioniert leider nicht.
Hallo Heavy,

Die Links verwenden .prevAll(), das findet alle Vorgänger auf
gleicher Ebene (mit gemeinsamem Eltern-Element), das
input-Element hat aber keine „Geschwister“.

Du kannst aber durch alle input-Elemente laufen und das letzte
vor dem auslösenden verwenden:

$(’#trigger’).click(function() {

var allInputs = $(‚table input‘);
var last;
for(var i=0; i<allInputs.length; i++) {
if(allInputs[i] === $(this)[0] && last) {
$(last).attr(‚checked‘, ‚checked‘);
} else if($(allInputs[i]).attr(‚class‘) === ‚KlasseA‘) {
last = allInputs[i];
}
}

});

Vielen Dank für Deine Bemühungen und das Scriptlet. Leider funzt es nicht. Die Ursache dafür habe ich mal noch nicht versucht herauszufinden, da ich darauf spekuliere, daß man mit JQuery-Methoden direkter zum Element finden kann.

Viele Grüße und danke nochmals
JK

P.S.: ich gehe davon aus es gibt mehrere Checkboxen der
KlasseA, sonst wäre es etwas einfacher mit
$(‚input.KlasseA‘).attr(‚checked‘, ‚checked‘);

Richtig, es gibt viele davon. Sonst hätte ich die Checkbox auch mit ihrer ID ansprechen können.

Hallo Jens,

das war eigentlich mit deinem Code getestet und die $-Konstrukte sind jQuery Methoden.

Bei mir funktioniert das http://jsfiddle.net/8Aqn8/

Gruß
Heavy

Hallo Heavy,

das war eigentlich mit deinem Code getestet und die
$-Konstrukte sind jQuery Methoden.

Bei mir funktioniert das http://jsfiddle.net/8Aqn8/

Hmm, aber nur beim ersten Mal (beim ersten Klick). Aber immerhin. Wenn sich die kürzere Codierung nicht anfindet, werde ich diesen Bug in Deiner Version versuchen zu fixen.

Melde mich dann wieder…

Grüße
JK

Hmm, aber nur beim ersten Mal (beim ersten Klick). Aber
immerhin. Wenn sich die kürzere Codierung nicht anfindet,
werde ich diesen Bug in Deiner Version versuchen zu fixen.

Mit der neuen ‚prop‘ Funktion sieht es besser aus: http://jsfiddle.net/8Aqn8/1/

HTH
Heavy