2013-03-28 10 views
11

Próbuję utworzyć instrukcję if w jQuery dla elementów, które mają element macierzysty z określoną klasą.jQuery - Jeśli element nie ma elementu nadrzędnego z określoną klasą

Oto, do czego do tej pory doszedłem, ale to nie w porządku.

if(!$(".myElem").parents(".myDiv")) { 
    console.log("test") 
}; 

Czy ktoś może wskazać mi właściwy kierunek, proszę.

+2

http://stackoverflow.com/questions/31044/is-there-an-exists-function-for-jquery – Narek

+0

możliwe duplikat [jak oceniać poprzedniego lub następnego elementu danego elementu istnieje z jQuery?] (http://stackoverflow.com/questions/5685685/how-to-judge-an-elements-previous-lub-next-element-exist-w--) - ten sam problem, nawet jeśli kierunek jest nieco inny . –

+0

Tytuł nie pasuje do pytania. Tytuł: "Jeśli element NIE ma", pytanie: "elementy, które mają" –

Odpowiedz

24

Zastosowanie length sprawdzić to są elementy selektora i closest() byłaby lepsza niż parents() jak przestanie kiedyś znajdzie dopasowanie:

if(! $(".myElem").closest(".myDiv").length) { 
    console.log("has no parent with the class .myDiv") 
} 
+0

Closest znajdzie nie tylko rodziców bezpośrednich, ale będzie wyszukiwać aż do znalezienia. –

+1

@Sylvanus - czy to nie o to chodzi? – adeneo

+0

Nie jest jasne, o co chodzi. –

5

Jeśli testujesz, czy element z klasą myElem ma bezpośredni rodzic z klasy myDiv użyć następującego testu

if(!$(".myElem").parent().hasClass("myDiv")) { 
    console.log("test") 
}; 
+2

tutaj .hasClass() byłaby lepszą opcją niż .is() –

+0

@ITppl tak masz rację –

1

ten powinien wybrać te elementy, które posiadają klasę myElem z rodzicem, który ma myDiv Klasa:

$(".myElem").filter(function(elem) { 
    return $(this).parents(".myDiv").length 
}); 

lub powinien to zaznaczyć te elementy, które posiadają klasę myElem i nie ma rodzica, który ma myDiv Klasa:

$(".myElem").filter(function(elem) { 
    return !$(this).parents(".myDiv").length 
}); 
2
if($(".myElem").parent().hasClass(".myDiv")) { 
    console.log("has a parent with the class .myDiv") 
} 
else 
{ 
    console.log("no parent class .myDiv found") 
} 
0

Spróbuj tego.

if($("#child").parent("span#parent").length > 0) 
    { 
      console.log("parent is span"); 

    } 
    else { 
      console.log("parent is not span or no parent"); 
    } 
0

Lepszym rozwiązaniem jest użycie .closest(), jeśli znasz nazwę klasy dziecka.

if(!$('yourtag.childClass').closest('yourParentTag').hasClass('classname')){ 
    console.log('does not exist'); 
} 
Powiązane problemy