포스트

04. 순회(탐색) 메소드(2)

1. descendants(자손, 후손) 메소드

1
2
3
4
5
6
7
8
9
선택된 요소의 하위 요소들을 선택할  있는 메소드

$('요소명').children([매개변수])
- 선택된 요소의 모든 자식 객체 리턴
- 매개변수가 있으면 매개변수와 일치하는 자식 객체만 리턴
- 바로 밑의 하위 요소만 찾는다

$('요소명').find(매개변수)
- 선택된 요소의 인자와 일치하는 모든 후손 객체 리턴
1
2
3
4
5
6
7
8
9
10
11
12
[css]
.wrap * {
  border : 1px solid lightgray;
  display : block;
  padding : 5px;
  margin : 15px;
  color : gray;
}

.type {
  width : 600px;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[html]
<div class="wrap"> hellow
  <div class="type"> div(greate-grand parent)
    <ul> ul(grand parent)
      <li> li(direct parent)
        <span>span</span>
      </li>
    </ul>
  </div>

  <div class="type"> div(grand parent)
    <p> p(direct parent)
      <span>span</span>
    </p>
  </div>
</div>

<p id="test">테스트</p>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[js]
// id가 test인 요소의 테두리를 2px 빨간 실선, 글자를 파란색으로 변경
$(function() {
  // 자바스크립트 객체를 매개변수로 전달하는 방법
  $("#test").css({"border":"2px solid red", "color":"blue"});
});

// css()의 매개변수로 사용할 코드를 미리 변수에 저장
const style1 = {"border":"2px solid red", "color":"red"};
const style2 = {"border":"2px solid orange", "color":"orange"};
const style3 = {"border":"2px solid yellow", "color":"yellow"};
const style4 = {"border":"2px solid green", "color":"green"};
const style5 = {"border":"2px solid blue", "color":"blue"};

$(() => {
  $("test").css(style4);
});

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[js]
// children() : 선택된 요소 바로 하위 요소(자식)를 선택하는 메서드
// 클래스가 wrap인 요소의 자식 스타일을 style1로 설정
$('.wrap').children().css(style1);

// ul, p, 태그의 스타일을 style2로 설정
$('.wrap').children().children().css(style2);

// children("매개변수(css선택자)")
// 선택된 자식 중 "선택자"와 일치하는 자식만 선택
// 클래스가 type인 요소 중 ul태그의 스타일을 style3로 설정
$(".type").children("ul").css(style3);

// 클래스가 wrap인 요소를 기준으로 li태그의 스타일을 style4로 설정
$(".wrap").children().children("ul").children("li").css(style4);

// find("매개변수(css선택자)")
// 선택된 요소의 후손 중 매개변수로 작성된 선택자와 일치하는 모든 요소
// 클래스가 wrap, 모든 span태그의 후손을 style5로 설정
$(".wrap").find("sapn").css(style5);

2. sideways(옆으로, 옆에서) 메소드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
같은 레벨에 있는 요소(형제) 선택할  있는 메소드

$('요소명').siblings([매개변수])
- 선택된 요소와 같은 레벨(형제) 있는 모든 요소 리턴
- 매개변수가 있으면 같은 레벨에 있는 요소  매개변수와 일치하는 모든 요소 리턴

$('요소명').next()
- 선택된 요소와 같은 레벨  선택된 요소의 다음 한개 요소 리턴

$('요소명').nextAll()
- 선택된 요소와 같은 레벨  선택된 요소의 다음 모든 요소 리턴

$('요소명').nextUntil(매개변수)
- 선택된 요소와 같은 레벨  매개변수 이전 까지의 모든 요소 리턴(동생 요소)

$('요소명').prev()
- 선택된 요소와 같은 레벨  선택된 요소의 이전 한개 요소 리턴

$('요소명').prevAll()
- 선택된 요소와 같은 레벨  선택된 요소의 이전 모든 요소 리턴

$('요소명').prevUntil(매개변수)
- 선택된 요소와 같은 레벨  매개변수 이전 까지의 모든 요소 리턴( 요소)
1
2
3
4
5
6
7
8
[css]
.warp, .wrap * {
  border : 1px solid lightgray;
  display : block;
  padding : 5px;
  margin : 15px;
  color : gray;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[html]
<div class="wrap"> div(parent)
  <p>p</p>
  <span>span</span>
  <h2>h2</h2>
  <h3>h3</h3>
  <p>p</p>
</div>

<ul>
  <p>p태그</p>
  <li>li1</li>
  <li>li2</li>
  <li class="prevTest">li3</li>
  <li>li4</li>
  <li>li5</li>
  <p>p태그</p>
</ul>

<span>테스트용 sapn 태그</span>
<h2>테스트용 h2 태그</h2>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[js]
const style1 = {"border":"2px solid red", "color":"red"};
const style2 = {"border":"2px solid orange", "color":"orange"};
const style3 = {"border":"2px solid yellow", "color":"yellow"};
const style4 = {"border":"2px solid green", "color":"green"};
const style5 = {"border":"2px solid blue", "color":"blue"};

// siblings() : 선택한 요소의 형제 요소를 모두 선택
// h2태그의 형제 요소의 스타일을 style1로 설정
$("h2").siblings().css(style1);

// h2 태그의 형제 요소 중 p태그만 style2로 설정
$("h2").siblings("p").css(style2);

// next() : 선택된 요소의 다음 형제 요소를 선택하는 메소드
// span 태그 다음에 오는 형제 요소의 스타일을 style3으로 설정
$("span").next().css(style3);

// nextAll() : 선택된 요소의 다음 형제 모두를 선택하는 메소드
// h2태그 다음에 오는 형제 모두를 style4로 설정
$("h2").nextAll().css(style4);

// nextUntil() - 동생 / prevUntil() - 형
$(".prevTest").prevUntil("p").css("fontSize", "50px");
$(".prevTest").nextUntil("p").css("fontSize", "10px");

1
2
3
4
5
6
7
8
[js]
// is("css선택자")
// 지정된 범위 내에 매개변수로 지정된 선택자와 일치하는 요소가 존재하는지 확인하는 메서드
// 존재하면 true, 아니면 false

// h2태그 이전에 있는 모든 형제 요소 중 p태그, pre태그가 있는지 확인
console.log($("h2").prev().is("p"));
console.log($("h2").prev().is("pre"));

1
2
3
4
5
6
7
8
9
[js]
$("span").on("click", function() {
  console.log("span 태그 클릭됨");
  console.log($(this));
  console.log(this);
})

// 이벤트 핸들러(이벤트 발생 시 동작하는 함수) 내부에 작성된 this라는 단어는
// 이벤트가 발생한 요소를 나타낸다 (js 기준)

1
2
3
4
5
6
7
8
9
[js]
$("h2").on("click", function() {
  // h2 태그를 클릭했을 때, 클릭한 요소의 이전 요소의 배경색을 red, 글자색을 white로 설정

  // $(this) : 이벤트 발생한 요소 선택
  $(this).prev().css({"backgroundColor":"red", "color":"white"});
  console.log( $(this).prev() );
  console.log( this.previousElementSibling);
});