jQuery : 부모의 특정 자식을 얻는 방법?


92

단순화 된 예제를 제공하기 위해 페이지에서 다음 블록을 여러 번 반복했습니다 (동적으로 생성됨).

<div class="box">
   <div class="something1"></div>
   <div class="something2">
      <a class="mylink">My link</a>
   </div>
</div>

클릭하면 다음을 사용하여 링크의 부모로 이동할 수 있습니다.

$(".mylink").click(function() {
   $(this).parents(".box").fadeOut("fast");
});

그러나 ... 나는 <div class="something1"> 그 특정 부모 .

기본적으로 누군가 직접 참조하지 않고 상위 형제를 참조하는 방법을 알려줄 수 있습니까? 빅 브라더라고합시다. 빅 브라더의 클래스 이름을 직접 참조하면 페이지에서 해당 요소의 모든 인스턴스가 페이드 아웃 될 수 있습니다. 이는 원하는 효과가 아닙니다.

난 노력 했어:

parents(".box .something1") ... no luck.
parents(".box > .something1") ... no luck.
siblings() ... no luck.

누군가? 감사.


Anurag의 대답은 옳지 않은 것처럼 보일 수 있습니다. – 그것은 확실히 나를 멈추고 생각하게 만들었습니다. 그러나 그것은 선택기를 실패하게 만드는 코드의 노골적인 오타를 지적하고 있습니다. 선택기는, jQuery를에서, .parent() 아니 .parents()
다윗은 분석 재개 모니카 말했다

@ricebowl : 틀 렸습니다. api.jquery.com/parents
SLaks

@ricebowl ... parent ()는 나에게 div something2를 줄 것이기 때문에 div 상자를 얻으려면 parent ()가 필요합니다.

아, 죄송합니다. 음 ... 내 무지를 전시하는 것이 최선인지, 다른 사람을 화나게하지 않으려면 오류를 삭제하는 것이 최선인지 모르겠습니다 ... = | 그래도 적어도 나는 오늘 유용한 것을 배웠다. 그게 요점이지 ..? =)
다윗은 분석 재개 모니카 말한다

1
@ricebowl, 걱정하지 마세요. 기여해 주셔서 감사합니다.

답변:


144

호출 .parents(".box .something1")하면 선택자와 일치하는 모든 부모 요소가 반환됩니다 .box .something. 즉, .something1내부에있는 부모 요소를 반환합니다..box 합니다.

다음과 같이 가장 가까운 부모의 자식을 가져와야합니다.

$(this).closest('.box').children('.something1')

이 코드 .closest는 선택기와 일치하는 가장 안쪽 부모를 가져 오도록 호출 한 다음 .children해당 부모 요소를 호출 하여 찾고있는 삼촌을 찾습니다.


나는이 조금 오래 알고 있지만 사용이 경우에 좋은 것은 아닙니다 ) 부모 ( 보다는 () 가장 가까운 내가 더 트리 탐색과 함께이 상상 (가까운) ?
rmorse

1
@acSlater : 그는 트리 순회가 필요 합니다. parent()잘못된 요소입니다.
SLaks

아 네, Tom이 죄송합니다. parent (). parent ()입니다! :)
rmorse

1
@acSlater : 예; 작동합니다. 그러나 이것은 Javascript를 HTML 구조와 훨씬 더 결합시킵니다. .closest(...)더 탄력적이며 더 읽기 쉽습니다.
SLaks

8
누군가 궁금해하는 경우 : .closest ()를 사용하여 올바른 부모를 찾은 후 직접 자식이 아닌 자식 요소 (예 : 자식의 자식)를 찾고 있다면. .children 대신 find ().
Fabien Snauwaert 2014

17
$(this).parent()

트리 순회는 재미있다

$(this).parent().siblings(".something1");

$(this).parent().prev(); // if you always want the parent's previous sibling

$(this).parents(".box").children(".something1");

그리고 훨씬 더 많은 방법으로이 문서가 도움 이 될 수 있습니다.


고맙지 만 부모가 아니라 부모 (또는 실제로 조부모)의 다른 자식을 찾고있었습니다.

헤헤 .. 정말 가족 일입니다.

13

이것은 클래스가있는 첫 번째 부모 box를 찾은 다음 정규식이 일치하는 첫 번째 자식 클래스를 찾고 somethingID를 얻습니다.

$(".mylink").closest(".box").find('[class*="something"]').first().attr("id")

6

귀하의 문제를 올바르게 이해했다면 $(this).parents('.box').children('.something1')이것이 귀하가 찾고있는 것입니까?


5

당신은 사용할 수 .each()와 함께 .children()괄호 내에서 선택과 :

//Grab Each Instance of Box.
$(".box").each(function(i){

    //For Each Instance, grab a child called .something1. Fade It Out.
    $(this).children(".something1").fadeOut();
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.