Wie wähle ich mit jQuery das erste übergeordnete DIV aus?

95
var classes = $(this).attr('class').split(' '); // this gets the current element classes

var classes = $(this).parent().attr('class').split(' '); // this gets the parent classes.

Der Elternteil in der obigen Situation ist ein Ankor.

Wenn ich den ersten übergeordneten DIV von $ (this) erhalten möchte, wie würde der Code aussehen?

var classes = $(this).div:parent().attr('class').split(' '); // just a quick try.

* Grundsätzlich möchte ich die Klassen des ersten übergeordneten DIV von $ (this) erhalten.

Vielen Dank

Adam
quelle

Antworten:

161

Verwenden Sie .closest()diese Option, um den DOM-Baum bis zum angegebenen Selektor zu durchlaufen.

var classes = $(this).parent().closest('div').attr('class').split(' '); // this gets the parent classes.
Shef
quelle
10
parents("div")durchläuft und gibt alle übergeordneten Divs zurück, die Sie danach verwenden sollten .eq(0), um sicherzustellen, dass nur die gewünschte zurückgegeben wird
meo
3
Denken Sie daran, dass die Leistung besser ist. .parents('div').eq(0)Wenn Sie diesen von jQuery FOLGENDEN CSS-Selektor verwenden, um nur nach dem ersten Element zu filtern, erhalten Sie eine leichte Leistungssteigerung. Weitere Informationen finden Sie im Abschnitt "Zusätzliche Hinweise" in jQuery: eq doc
Noah Whitmore
@NoahWhitmore Behoben. Wird verwendet, closest()damit nicht alle Eltern außer den divEltern zurückgegeben werden.
Shef
41

Verwenden Sie .closest()diese Option, um das erste Vorfahrenelement abzurufen, das dem angegebenen Selektor entspricht 'div':

var classes = $(this).closest('div').attr('class').split(' ');

BEARBEITEN:

Wie @Shef bemerkt hat, .closest()wird das aktuelle Element zurückgegeben, wenn es zufällig auch ein DIV ist. Um dies zu berücksichtigen, verwenden Sie .parent()zuerst:

var classes = $(this).parent().closest('div').attr('class').split(' ');
Tatu Ulmanen
quelle
5
.closest()wird sich selbst $(this)anpassen, wenn es sich um ein DIV-Element handelt.
Shef
@ Shef, das war eine neue Info für mich, danke. Ich habe meine Antwort bearbeitet, um dies widerzuspiegeln.
Tatu Ulmanen
3
Sie könnten einfach verwenden.parents("div").eq(0)
meo
8

Dies wird Eltern, wenn es ein div ist. Dann wird es klasse.

var div = $(this).parent("div");
var _class = div.attr("class");
Esben
quelle
1
@meo Das hat die Frage gestellt.
Daniel West
3

Halte es einfach!

var classes = $(this).parent('div').attr('class');
Daniel West
quelle
0

Zwei der besten Optionen sind

$(this).parent("div:first")

$(this).parent().closest('div')

und natürlich finden Sie die Klasse attr von

$(this).parent("div:first").attr("class")

$(this).parent().closest('div').attr("class")
Junaid Masood
quelle