2013-03-26 15 views
26

closest() otrzyma pierwszy element pasujący do selektora, testując sam element i przechodząc przez jego przodków w drzewie DOM. Ale chcę wiedzieć Czy jest jakiś sposób, aby uzyskać wynik wykluczający itseft (chodzi mi o to, żeby go rodzice)? dzięki.jquery closest self self

Pozwól mi wziąć przykład. przejrzyj go.

<div id='div1' class="container"> 
    <div id="div2" class="container"> 
     <!--many nested div.container as it directly or indirectly children --> 
    </div> 
    <div id="div3" class="container"> 
     <!--many nested div.container as it directly or indirectly children --> 
    </div> 
</div> 

$(function() { 

    $('div.container').on('mouseover', function(e){ 
     //I only want to select the first parent with the class container. 
     //closest include the this element. 
     console.log($(this).closest('.container').attr('id')); 
    }); 
}); 
+0

można wyjaśnić więcej? dodanie fragmentów kodu byłoby bardziej pomocne ... – Reigel

+3

'.parents()' pomoże. –

+0

@Reigel Czy mógłbyś ponownie to sprawdzić? Zaktualizowałem. dzięki. –

Odpowiedz

0

Prawidłowa odpowiedź to .parents('.container:first'); dzięki

+15

Pod względem wydajności, '.parent(). Closest ('. Container')' powinno działać lepiej, gdy przestaje pasować po dopasowaniu pierwszego elementu, w przeciwieństwie do '.parents()', który zawsze przemieszcza się aż do poziomu dokumentu. –

+0

Wiesz? Myślę, że '.parent() ....' to mało twardy kod. –

+3

No tak. Przesunięcie o jeden poziom wyżej, gdy nie chcesz dopasować pierwszego poziomu, jest logiczne. Tak czy inaczej oba mają ten sam wynik - różnica polega na tym, że posiadanie ': first' wewnątrz' parent() 'może być trochę kosztowne, ponieważ': first' jest rozszerzeniem Sizzle, a selektory są zazwyczaj dopasowywane do każdego elementu (przodka) przed powracający. –

69

Możesz przechodzić do poziomu przed próbując znaleźć .closest() przodka:

$(this).parent().closest('.container'); 
0

Jeśli naprawdę chcesz tylko div nadrzędnej, to tak $ (to) .parents ("kontener") będzie działać. Jeśli chcesz znaleźć najbliższy element i pozwolić mu być rodzeństwem (co wydaje się być może tym, co faktycznie chcesz osiągnąć), możesz użyć $ (this) .prev (". Container").

+0

Nie będzie to przydatne, ponieważ nigdy nie wiesz, czy jego rodzic jest o jeden poziom wyżej lub wyżej i kierujesz swoich rodziców na klasy! Co jeśli

został zagnieżdżony w innym znaczniku div, który nie miał klasy, a on nadal chciał kierować na rodziców! –