2009-02-27 12 views
14

Załóżmy, że mam element DOM - jak sprawdzić, czy pasuje do selektora jQuery, takiego jak p czy .myclass? Łatwo jest użyć selektora, aby dopasować dzieci elementu, ale chcę odpowiedzi prawdziwej/fałszywej, czy ten konkretny element pasuje?Jak mogę sprawdzić, czy element pasuje do selektora?

Element może nie mieć identyfikatora (i nie mogę przypisać go losowo z przyczyn leżących poza tym obszarem), więc nie mogę zastosować selektora do elementu nadrzędnego elementu i wyszukać dzieci o tym samym identyfikatorze co moje .

Czy to działa zgodnie z przeznaczeniem? Nie mogę wymyślić porównań obiektów JavaScript.

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

Wydaje się, że byłoby to łatwy sposób, aby zobaczyć, czy pasuje do elementu DOM selektor jQuery ...

+0

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

Odpowiedz

32

Można użyć metody is():

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

ale robi to pracować tak? '$ (this) .is (" body .content p ")' -Potrzebuję czegoś takiego. – Luke

+0

Dlaczego nie najpierw wykonać selektor, a następnie sprawdzić, czy element jest w wyniku ... – jahroy

+0

@Luke Działa jak to tak. –

3

Wierzę is() metoda jest tym, czego szukasz.

W przeciwnym razie możesz po prostu spróbować wybrać element bezpośrednio, jeśli o to ci chodzi.

Więc jeśli jest to „a” z klasą „MojaKlasa”, po prostu zrobić $ („a.myclass”)

1

nie mogę zastosować do mojego wyboru rodzica elementu i szukać dzieci o tym samym identyfikatorze co moje.

Tak czy inaczej nie możesz tego zrobić - atrybut id musi być unikalny.

0

Może chcesz po prostu:

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

Jeśli nie ma dopasowania, długość zwraca 0, co jest falsy, więc można go używać w instrukcji if, jak:

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

Prawdopodobnie byłoby warte przechowywania go w oddzielnej zmiennej, a następnie sprawdzania długości; w ten sposób, jeśli chcesz zrobić cokolwiek z dopasowanymi elementami, nie musisz ponownie wykonywać tego samego selektora.

0

Bez jQuery, używając 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

Powiązane problemy