9 Stimmen

Jquery: Kinder ausschließen

Ich weiß, dass dies bereits mehrmals gefragt wurde, und ich habe alle Vorschläge ausprobiert und alles über unterschiedliche Selektoren gelesen, usw., aber nichts funktioniert für mich

Angesichts des folgenden HTML-Abschnitts:

   link

        link2

Ich möchte das -Tag des ersten divs auswählen, aber nichts aus dem zweiten div

Ich habe versucht:

$('.class1').not('.class2, .class3')
$('.class1').not('.class2')
$('.class1').not('.class3')
$(".class1:not(.class2)")
$(".class1:not(.class3)")
$(".class1:not(.class2, .class3)")
$("div.class1:not(.class2)")
$("div.class1:not(div.class2)")
$("div.class1:not(div.*)")

usw.

Ich weiß nicht, ob es daran liegt, dass das zweite div zwei Klassennamen hat oder weil die -Tags des zweiten divs keine direkten Kinder des zweiten divs sind (z.B. es gibt Schriftarten um sie herum), aber ich kann das zweite div nicht ausschließen.

13voto

Pekka Punkte 429407

Hast du den Kind-Selektor > schon ausprobiert?

div.class1 > p > a

wählt nur unmittelbare Nachkommen von class1 aus.

Wenn du eine breitere Regel benötigst, denke ich, dass du nur ein Leerzeichen in einem deiner Beispiele hinzufügen musst:

$(".class1 :not(.class2) a")

Update aus den Kommentaren: Dies funktioniert:

$(".class1 > :not(.class2.class3) a").css('border','1px solid red');

7voto

Hatte dasselbe Problem, wo beliebig viele Elemente im Weg sein könnten, meine Lösung war:

$('.class1').find("a").not(".class2 a, .class3 a").wasauchimmer;

Im Grunde genommen, alles holen und dann diejenigen entfernen, die "ausgeschlossen" werden sollen

2voto

Kobi Punkte 129985

Nun, das hängt von Ihren genauen Bedürfnissen ab, aber das hier könnte funktionieren - es wählt das div aus, das direkt darunter liegt, und dann den Link darin:

$('.class1 > p a')

Um alle Links zu finden, außer denen, die in einem anderen

verschachtelt sind, können Sie etwas Ähnliches versuchen:

var class1 = $(".class1");
var badLinks = class1.find('div a'); // oder .class2 a, .class3 a
var goodLinks = class1.find('a[href$=jpg]').not(badLinks);

Das findet alle Links in Ihrer Klasse und entfernt die Links, die in einem anderen

enthalten sind, auf jeder Ebene. Wenn Sie das etwas kürzer schreiben möchten, können Sie folgendes verwenden:

class1.find('a[href$=jpg]').not(class1.find('div a'));

1voto

Gumbo Punkte 617646

Wenn Sie den Kind-Selektor E > F anstelle des Nachfahren-Selektors E F in Kombination mit den Elementnamen verwenden, erhalten Sie nur das gewünschte Element, z. B.:

.class1 > p > a

0voto

null Punkte 103

Gut, endlich eine akzeptable Lösung ausgearbeitet

$('.class1').find('a[href$=".jpg"],a[href$=".png"],a[href$=".gif"]').each(function(){
if($(this).parents('div').attr('class') == 'class1'){was auch immer machen}});

Alles andere hat bei mir nicht funktioniert. Vielen Dank für die Hilfe, viele der Antworten hier hätten funktioniert, aber das erste div könnte beliebig viele Kind-Elemente (oder gar keine) vor dem zweiten div enthalten, und das zweite div könnte beliebig viele Kind-Elemente vor dem a-Tag enthalten, den ich filtern wollte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X