본문 바로가기
프로그래밍/jQuery

jQuery API 정복 - position으로 부모 찾기, offsetParent()

by zoo10 2011. 6. 29.

.offsetParent()

원문 링크 http://api.jquery.com/offsetParent/

.offsetParent()Returns : jQuery

개요 : 위치(position) 요소를 기반으로 한 부모 요소를 찾습니다.

  • .offsetParent()

.offsetParent() 함수는 DOM 트리에 존재하는 부모요소들 중 위치(positioned)요소를 기준으로 가장 가까운 요소를 찾아서 jQuery 객체로 만들어(wrapped) 줍니다. 여기서 말한 위치(positioned)는 CSS의 속성인 relative, absolute, fixed를 의미합니다. 이런 정보들은 페이지상에서 객체들의 위치를 계산하기 위해 아주 유용합니다.

음. 좀 어렵네요. CSS의 포지션 속성을 좀 알아야 하고 거기다가 DOM에 대한 기초 상식도 있어야 하겠습니다. 스타일시트를 잘 아시는 분들은 쉽게 이해하실 수 있겠네요. 혹시라도 잘 이해가 되지 않으시면 스타일시트의 위치 즉 position 속성에 대해 공부를 하시면 아주 좋을 것 같습니다. 요즘은 이게 대세죠. 꼭 한번 정보를 찾아보시라 권해드립니다.

포지션(positioned) 속성을 가진 요소를 가지고 가장 가까운 곳에 있는 목록을 찾는 것을 생각해 보겠습니다.

 
<ul class="level-1">
  <li class="item-i">I</li>
  <li class="item-ii" style="position: relative;">II
    <ul class="level-2">
      <li class="item-a">A</li>
      <li class="item-b">B
        <ul class="level-3">
          <li class="item-1">1</li>
          <li class="item-2">2</li>
          <li class="item-3">3</li>
        </ul>
      </li>
      <li class="item-c">C</li>
    </ul>
  </li>
  <li class="item-iii">III</li>
</ul>

item A 에서 시작한다면, 우리는 위치적인 부모(positioned accestor)를 찾기 위해 아래와 같이 스크립트를 구성할 수 있습니다.

$('li.item-a').offsetParent().css('background-color', 'red');

결과는 item II 에 속한 모든 리스트의 배경색이 빨간색으로 바뀌게 됩니다. 잘 이해가 되시나요? 사실 이런 방법 말고도 같은 결과를 만들기 위해 아주 많은 방법이 있습니다. 여기서 얘기하고자 하는 것은 position 속성에 대한 것이므로 그 부분을 유념해 보시면 되겠습니다.

예 제  
아이템 'A'의 부모요소를 찾아볼까요?

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  
    <ul class="level-1">
      <li class="item-i">I</li>
      <li class="item-ii" style="position: relative;">II
        <ul class="level-2">
          <li class="item-a">A</li>
          <li class="item-b">B
            <ul class="level-3">
              <li class="item-1">1</li>
              <li class="item-2">2</li>
              <li class="item-3">3</li>
            </ul>
          </li>
          <li class="item-c">C</li>
        </ul>
      </li>
      <li class="item-iii">III</li>
    </ul>
  
<script>$('li.item-a').offsetParent().css('background-color', 'red');</script>
 
</body>
</html>

미리보기

예제 소스를 보시면 한방에 아실수 있을 듯 합니다.

 

부모 요소를 찾는 방법! 참 많기도 합니다. 그때그때 골라쓰기도 버겁겠네요. 가끔은 좀 너무한데 하는 경향이 있습니다. ^^

그럼 즐프하세요.

※ 본 예제는 http://www.jquery.com 에 있는 내용임을 밝힙니다.