JQuery는 특정 클래스 접두사가있는 첫 번째 부모 요소를 찾습니다.


124

특정 클래스 접두사를 가진 첫 번째 부모를 얻고 싶습니다.

<div class="div-a3332"> 
  <div class="div-a89892">
    <p>
      <div class="div-b2">
        <div id="divid">hi</div>
      </div>
    </p>
  </div>
</div>

예를 들어, 현재 요소는 #divid이고 클래스 접두사 div-a가있는 첫 번째 요소를 찾고 싶습니다. 따라서 기본적으로 다음을 선택합니다.

<div class="div-a89892">

6
중지. 정보를 한 클래스로 결합하는 대신 여러 클래스를 사용하십시오. '일치'선택기는 느리고이 디자인은 수정을 위해 확장되지 않습니다. <div class='a'>에 대한 규칙을 제공하십시오 div.a. div실제로 클래스 이름을 입력하는 이유를 전혀 모르겠습니다 .
— Stefan Kendall

2
그래도 데이터를 클래스 접두사로 병합하지 마십시오. 이것은 끔찍한 패턴이며 여러 클래스로 쉽게 해결할 수 있습니다.
— Stefan Kendall

17
@StefanKendall : 때로는 다른 사람의 타사 쓰레기를 다루고 있으며 때로는 신속하게 수정할 수없는 레거시 앱을 지원합니다. 나쁜 디자인은 삶의 사실이며 이것은 완벽하게 합법적 인 질문입니다.
— Nerdmaster

답변:


222

.closest()선택기와 함께 사용 :

var $div = $('#divid').closest('div[class^="div-a"]');

BTW, 이것이 왜 반대표를 받았는지 모르겠습니다. 클래스 접두어 선택은 취성이지만, 그것은 것입니다 작동합니다.
— Matt Ball

OP하려면 : 찾고있는 요소가 DOM 트리 어딘가에있는 부모인지, 찾고있는 객체와 유사한 것이 아닌지 확인하십시오 (문서에 따라). "문서의 어느 곳에서나 가장 가깝다"가 아니라 "DOM 트리를 작업하여 가장 가깝습니다".
— Christian P.

나를 위해 작동하지 않습니다. 또한 div 요소가 아니어도되는 특정 접두사가있는 첫 번째 요소를 찾고 싶습니다.
— Time Travel

@Time 그런 다음 div요소 선택기 를 제거하십시오 $('#divid').closest('[class^="div-a"]').. @Stefan이 언급했듯이 실제로 여러 클래스를 사용해야합니다.
— Matt Ball

3
이 선택기는 터무니없는 양의 사이클을 사용하지만 여전히 빠를 수 있습니다. IE6, IE7 또는 IE8을 지원해야하는 경우 DOM이 너무 커지면 정말 망할 수 있습니다. IE는 특정 수의 JS VM 명령이 실행될 때 "스크립트가 응답하지 않음"대화 상자를 표시하고 특정 시간이 지나지 않습니다. 나는 바로 이런 이유로 인터넷 익스플로러가 0.1ms에서 종료되는 스크립트를 보았다.
— Stefan Kendall

56

나중에 Jquery를 사용하면 .parents()메서드로 부모를 찾을 수 있습니다 .

따라서 다음을 사용하는 것이 좋습니다.

var $div = $('#divid').parents('div[class^="div-a"]');

이것은 선택자와 일치하는 모든 부모 노드를 제공합니다. 선택기와 일치하는 첫 번째 부모를 얻으려면 다음을 사용하십시오.

var $div = $('#divid').parents('div[class^="div-a"]').eq(0);

등의 DOM 통과 쿼리의 경우에 문서를 체크 아웃 DOM을 통과 .


대답은 오해의 소지가 없으며 .closest ()에 대한 또 다른 대안을 보여주는 것뿐입니다. .parents ()는 더 읽기 쉽고 문제에 대한 또 다른 해결책입니다.
— Sunny R Gupta 2013

9
Closest는 이보다 더 나은 솔루션입니다. 분명히 가장 가까운 것을 사용하는 것이 더 효율적이지만 동의하지만 가장 잘 명명 된 함수는 아닙니다.
— Mog0 2014

1
재미있게도 .parentsUtil ()이 예상대로 작동하지 않았기 때문에이 솔루션을 사용하게되었습니다.
— Mark Handy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.