jQuery-Test, ob element1 von element2 abstammt

Lesezeit: 3 Minuten

Benutzer-Avatar
Jake

Kennt jemand einen guten Weg, um zu testen, ob ein Element, das in einer Var gespeichert ist, der Nachkomme eines anderen ist, das ebenfalls in einer Var gespeichert ist?

Ich brauche nicht element1.isChildOf('selector')das ist leicht.
Ich brauche element1.isChildOf(element2)

element2.find(element1).size() > 0 Scheint nicht zu funktionieren.

Ich möchte kein Plugin schreiben müssen, das verwendet wird .each jedes Kind zu testen, ob ich es vermeiden kann.

  • Wenn Sie Nachkommen meinen, bearbeiten Sie bitte die Frage, um sie zu klären.

    – Kletus

    8. März 2010 um 2:38 Uhr

  • Das sollte geschützt werden!

    – Rafaelcastrocouto

    4. Februar 2017 um 11:25 Uhr

Benutzer-Avatar
Max Shawabkeh

Wenn Sie 1.4 verwenden und nach einem suchen Nachfahre eher als ein Kind als Ihr find() Beispiel impliziert, es gibt a has() Methode:

element2.has(element1).length > 0

  • has() überprüft funktioniert, ob etwas a ist Nachfahre und kein Kind gemäß dem Titel.

    – Kletus

    8. März 2010 um 1:46 Uhr

  • Du hast Recht. Das find() Beispiel in der Frage hat mich in die Irre geführt. Geklärt.

    – Max Shawabkeh

    8. März 2010 um 1:54 Uhr

  • Tut mir leid, Descendant ist das, was ich suche. Ich werde das jetzt versuchen. Prost

    – Jake

    8. März 2010 um 2:01 Uhr

  • Vielen Dank. Ich fand auch, dass ich das nicht brauchte > 0 seit 0 == false

    – Jake

    8. März 2010 um 2:20 Uhr

  • @Jake Hüten Sie sich vor dieser Annahme, insbesondere bei jQuery/-ui. Zum Beispiel, el.toggleClass('contains', el.has(el2)) würde Ihre Klasse mit einer kurzen Animation umschalten, was zu Performance-Problemen führen könnte. Wenn Sie eine solche Verknüpfung außerhalb eines booleschen Kontexts verwenden, müssen Sie die beibehalten > 0 part, oder wandeln Sie es in einen booleschen Wert um, z. B. mit !!.

    –Pierre

    18. August 2013 um 6:52 Uhr

Benutzer-Avatar
Cletus

Sie können verwenden index() dafür. Es wird -1 zurückgegeben, wenn ein Element nicht in der Menge enthalten ist. Vorausgesetzt element1 und element2 sind DOM-Elemente und nicht jQuery-Objekte:

if ($(element2).children().index(element1) != -1) {
  // it's a child
}

Der Vollständigkeit halber, um zu testen, ob etwas a ist Nachfahre und nicht nur ein Kind, es kann auch dafür verwendet werden:

if ($(element1).parents().index(element2) != -1) {
  // element1 is a descendant of element2
}

  • Das .parents() Lösung scheint am effizientesten

    – bobobobo

    2. Oktober 2014 um 2:32 Uhr

Benutzer-Avatar
uɥƃnɐʌuop

Ab Jquery 1.6 können Sie auf diese Weise feststellen, ob ein jquery-Objekt ein Kind eines anderen jquery-Objekts ist:

element2.is(element1.children());

Auch bemerkenswert, da is() akzeptiert jetzt mehrere verschiedene Argumente (das erste Argument kann eine Funktion, ein jQuery-Selektor oder ein DOM-Element sein), Sie können es sich nicht mehr einfach als “ist” vorstellen, sondern eher als “ist oder ist in”.

Ich weiß, dass dieser Thread alt ist, aber das funktioniert auch, wenn Sie nach oben und nicht nach unten prüfen möchten:

function isElementChildOf(childElement, parentElement) {
    return 0 !== $(childElement).parents(parentElement).length;
}

Hier ist ein Arbeitsbeispiel

Das ist true wenn element1 das Kind von element2 ist, mit anderen Worten, element1 hat ein Elternteil, das ist element2

$(element1).parents(element2).length 

so ist es nicht okwenn der Elternteil mehr Kinder hat (Sagen wir, sie sind es input‘s):

$(element2).children(element1).length 

1246380cookie-checkjQuery-Test, ob element1 von element2 abstammt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy