💡깨달음💡/jQuery

jQuery의 메서드(2)

과부하가즈아 2024. 2. 9. 14:15

🔴요소의 탐색

🔻조상 요소

🔻형제 요소

🔻자식 요소

🔻기타 탐색

🔻필터링 


조상 요소의 탐색

.parent() 선택한 요소의 부모(parent) 요소를 선택함.

이때 선택자를 인수로 전달하여, 전달받은 선택자에 해당하는 부모 요소만을 선택할 수도 있다.
.parents() 선택한 요소의 조상(ancestor) 요소를 모두 선택함.

이때 선택자를 인수로 전달하여, 전달받은 선택자에 해당하는 조상 요소만을 선택할 수도 있다.
.parentsUntil() 선택한 요소의 조상 요소 중에서 지정한 선택자에 해당하는 요소 바로 이전까지의 요소를 모두 선택함.

이때 선택자를 인수로 전달하지 않으면, .parent() 메소드와 같이 선택한 요소의 조상 요소를 모두 선택한다.
.closest() 선택한 요소를 포함한 조상 요소 중에서 지정한 선택자에 해당하는 요소 중 가장 첫 번째 요소를 선택함.

이 메서드가 요소를 탐색하는 방식은 .parents()메서드와 비슷하지만, 해당 요소의 상위 요소뿐만 아니라 해당 요소의 자신까지도 포함하여 탐색한다는 점이 다르다.

형제 요소의 탐색

.siblings() 선택한 요소의 형제(sibling) 요소 중에서 지정한 선택자에 해당하는 요소를 모두 선택함.
.next() 선택한 요소의 바로 다음에 위치한 형제 요소를 선택함.
.nextAll() 선택한 요소의 다음에 위치한 형제 요소를 모두 선택함.
.nextUntil() 선택한 요소의 형제 요소 중에서 지정한 선택자에 해당하는 요소 바로 이전까지의 요소를 모두 선택함.
.prev() 선택한 요소의 바로 이전에 위치한 형제 요소를 선택함.
.prevAll() 선택한 요소의 이전에 위치한 형제 요소를 모두 선택함.
.prevUntil() 선택한 요소의 형제 요소 중에서 지정한 선택자에 해당하는 요소 바로 다음까지의 요소를 모두 선택함.

.siblings(): 선택요소의 형제요소를 선택

<body>
    <div class="btn">
      <!--하나는 기본으로 셋팅이 되어있어야 하니까 클래스 미리 부여-->
      <span class="active">공지사항</span> 
      <span>갤러리</span>
			<span>Menu01</span>
      <span>Menu02</span>
    </div>

    <!-- 제이쿼리 open source 파일 -->
    <script src="script/jquery-1.12.4.js"></script>
    <!-- 우리가 만드는 커스텀 js -->
    <script src="script/index.js"></script>
  </body>
.btn span {
  border-radius: 5px;
  background-color: #ccc;

  display: inline-block;
  width: 100px;
  height: 20px;
  text-align: center;
  padding: 5px;

  cursor: pointer;
}

/* active클래스 부여된 요소의 css*/
.btn span.active {
  background-color: #fff;
  border: 1px solid black;
}
$(".btn span").click(function () {
	// this=클릭되는 span자체에 active라는 클래스 부여해주면서
  // 클릭된 요소임을 인지함과 동시에
  $(this).addClass("active");  

	// this=클릭되는 span자체의 형제 요소 즉, 다른 요소에서 active클래스를
  // 제거해주면서 기본css로 돌아가도 
  $(this).siblings().removeClass("active");
});


자식 요소의 탐색

.children() 선택한 요소의 자식(child) 요소를 모두 선택함.
.find() 선택한 요소의 자손(descendant) 요소 중에서 전달받은 선택자에 해당하는 요소를 모두 선택함.

.chilldren(): 선택요소의 바로 아래 단의 개인 자식요소만을 선택

<body>
    <ul class="menu">
      <li>
        <a href="#none">MENU-1</a>
        <div class="sub-menu">
          <a href="#none">SUB-MENU-1</a>
          <a href="#none">SUB-MENU-2</a>
          <a href="#none">SUB-MENU-3</a>
          <a href="#none">SUB-MENU-4</a>
        </div>
      </li>
      <li>
        <a href="#none">MENU-2</a>
        <div class="sub-menu">
          <a href="#none">SUB-MENU-1</a>
          <a href="#none">SUB-MENU-2</a>
          <a href="#none">SUB-MENU-3</a>
          <a href="#none">SUB-MENU-4</a>
        </div>
      </li>
    </ul>

    <!-- 제이쿼리 open source 파일 -->
    <script src="script/jquery-1.12.4.js"></script>
    <!-- 우리가 만드는 커스텀 js -->
    <script src="script/index.js"></script>
  </body>
a {
  text-decoration: none;
}
/* ul */
.menu {
  list-style: none;
  padding: 0;
  width: 200px;
  /* border: 1px solid red; */
}

.menu li > a {
  /*클래스가 menu인 요소 아래의 li바로 밑에 있는 a*/
  background-color: black;
  color: white;

  display: block;
  text-align: center;
  padding: 5px;
}
.sub-menu {
  border: 1px solid black;

  /* 여기서 none */
  display: none;
}
.sub-menu > a {
  display: block;
  text-align: center;
  padding: 5px;
  color: black;
}
$(".menu li").mouseenter(function () {
  // $(this).children().slideDown();
  // $(this).children()->.menu li의 자식 요소-> a랑 div 둘다로 인식 그래서

  $(this).children(".sub-menu").stop().slideDown();
  // children()하고 ()안에 명확하게 짚어줘야 한다. 
  // 한개라면 이 과정이 필요가 없지만 여러개이므로 명확하게 지정해 줄 필요가 있다.
  // stpo()을 해줌으로써 실행 중인 모든 이펙트 효과를 즉시 중지시킨다.
});

$(".menu li").mouseleave(function () {
  $(this).children(".sub-menu").stop().slideUp();
});


기타 탐색 메서드

.add() 선택한 요소의 집합에 전달받은 요소를 추가함.
.addBack() 선택한 요소의 집합에 바로 전에 선택했던 요소를 추가함.
.each() 선택한 요소 집합의 요소마다 전달받은 콜백 함수를 실행함.
.end() 마지막으로 실행한 메소드의 실행 전 상태로 선택한 요소의 집합을 복원함.
.offsetParent() 선택한 요소를 위치시킬 때 기준이 되었던 조상 요소를 선택함.
.contents() 선택한 요소의 자식(child) 요소를 모두 선택함. (텍스트 노드와 주석 노드까지 모두 포함함)

필터링 메서드

.first() 선택한 요소 중에서 첫 번째 요소를 선택함.
.last() 선택한 요소 중에서 마지막 요소를 선택함.
.eq() 선택한 요소 중에서 전달받은 인덱스에 해당하는 요소를 선택함.
.filter() 선택한 요소 중에서 전달받은 선택자에 해당하거나, 함수 호출의 결과가 참(true)인 요소를 모두 선택함.
.not() 선택한 요소 중에서 전달받은 선택자에 해당하거나, 함수 호출의 결과가 참(true)인 요소를 제외한 나머지 요소를 모두 선택함.
.has() 선택한 요소 중에서 전달받은 선택자에 해당하는 요소를 자손 요소로 가지고 있는 요소를 모두 선택함.
.is() 선택한 요소 중에서 전달받은 선택자에 해당하는 요소가 하나라도 존재하면 참(true)을 반환함.
.map() 선택한 요소 집합의 각 요소마다 콜백 함수를 실행하고, 그 반환값으로 구성된 제이쿼리 객체를 반환함.
.slice() 선택한 요소 중에서 전달받은 인덱스 범위에 해당하는 요소만을 선택함.

 

 

 

🔗참고🔗

https://tcpschool.com/jquery/jq_elementTraversing_AncestorTraversing