2009-02-27 6 views
14

Angenommen, ich habe ein DOM-Element - wie kann ich feststellen, ob es mit einem jQuery-Selektor übereinstimmt, z. B. oder .myclass? Es ist einfach, den Selektor zu verwenden, um untergeordnete Elemente des Elements abzugleichen, aber ich möchte eine echte/falsche Antwort darauf, ob dieses bestimmte Element übereinstimmt?Wie kann ich feststellen, ob ein Element mit einem Selektor übereinstimmt?

Das Element hat möglicherweise keine ID (und ich kann es aus anderen Gründen nicht zufällig zuweisen). Daher kann ich meinen Selektor nicht auf das Elternelement anwenden und nach Kindern mit derselben ID wie meine suchen .

Funktioniert das wie gewünscht? Ich kann Javascript-Objektvergleiche nicht herausfinden.

$(selector, myElement.parentNode).each({ 
    if (this == myElement) // Found it 
}); 

Scheint, als ob es eine einfache Möglichkeit, ob ein DOM-Element ein jQuery-Selektor passt, um zu sehen sein würde ...

+0

Duplikat - https://stackoverflow.com/q/3304638/104380 – vsync

Antwort

32

Sie die is() Methode verwenden können:

if($(this).is("p")){ 
// ... 
} 
+1

aber tut dies so arbeiten? '$ (this) .is (" body .content p ")' -Ich würde so etwas brauchen – Luke

+0

Warum nicht den Selektor zuerst ausführen, dann testen, ob das Element im Ergebnis ist ... – jahroy

+0

@Luke Es funktioniert wie das ja. –

3

glaube ich, die is() Methode ist was du suchst.

Andernfalls können Sie versuchen, das Element direkt auszuwählen, wenn Sie das meinen.

Also, wenn es ein „a“ mit einer Klasse von „myclass“, nur tun $ („a.myclass“)

1

Ich kann meine Wähler auf die geordneten Elements nicht gelten und sucht Kinder mit der gleichen ID wie meins.

Sie können das sowieso nicht tun - das Attribut id muss eindeutig sein.

0

Vielleicht möchten Sie gerade:

$(".complicated #selector p.with > div.manyParts").length 

Wenn es keine Übereinstimmungen gibt, Länge 0 zurück, das ist falsy, so dass Sie es in einer if Anweisung, wie zu verwenden: Wahrscheinlich

if($(".doesThis #exist").length) { 
    // Do things 
} 

wäre es wert, es in einer separaten Variablen zu speichern und dann die Länge zu überprüfen; Auf diese Weise müssen Sie, wenn Sie mit den übereinstimmenden Elementen etwas tun müssen, den gleichen Selektor nicht erneut ausführen.

0

Ohne jQuery, mit Element.matches():

// lets define 2 variables pointing to ordinary <div> elements 
 
var elm1 = document.querySelector('div'); 
 
var elm2 = elm1.nextElementSibling; 
 

 
console.log(
 
    elm1.matches('.foo'),   // true 
 
    elm1.matches('.bar'),   // false 
 
    elm2.matches('[title=bar]'), // true 
 
)
<div class='foo'></div> 
 
<div title='bar'></div>


See supported browsers list