Chapter 03. 노드 다루기 - 노드 찾기 


Lesson 03. 자식 노드 찾기


- 핵심 01 : 모든 자식 노드 찾기

- 핵심 02 : 특정 자식 노드만 찾기

- 핵심 03 : 첫 번째 자식 노드 찾기

- 핵심 04 : 마지막 자식 노드 찾기

- 핵심 05 : n번째 자식 노드 찾기


- 핵심 01 : 모든 자식 노드 찾기

사용법 : $대상.children()


특정 노드의 바로 하위에 위치한 모든 자식 노드를 찾고 싶을 때 children() 메서드를 사용합니다


* children() vs contents() // 텍스트 노드를 포함해서 구하지않느냐 vs 구하느냐

chilren()은 자식 노드 중 오직 태그만을 골라 찾아 줍니다.

content()는 태그 노드는 물론 텍스트 노드 등의 모든 자식 노드를 자식 노드로 찾아 줍니다

(실무에서는 contents()를 사용하지 않지만, 가끔씩 사용한다.)


예제 01. #samplePage의 바로 하위 자식 노드만을 찾아 border를 "4px solid #f00"으로 변경해 주세요.

1
2
3
4
5
6
$(document).ready(function() 
{
    $("#samplePage").children().css("border","4px solid #f00");
    console.log($("#samplePage").children().length); // 테스트 
});
 
cs


- 핵심 02 : 특정 자식 노드만 찾기

사용법 : $대상.children("선택자")


children("선택자") 메서드를 이용하면 선택자에 해당하는 특정 자식 노드만 찾을수 있습니다.


예제 02. #samplePage의 바로 하위 자식 노드 중 test1 클래스가 적용된 노드를 찾아  border를 "4px solid #f00"으로 변경해 주세요.

1
2
3
4
5
6
$(document).ready(function()
{
    $("#samplePage").children(".test1").css("border", "4px solid #f00");    
    console.log("#samplePage").children(".test1").length);
});
 
cs


* children("선택자") 메서드를 find("선택자")와 동일한 기능으로 착각할 수 있는데, 이 둘은 완전히 다른 기능을 가진 메서드 입니다.

find() 메서드는 바로 다음 하위 자식 노드에서만 찾는 것이 아닌, 모든 자손 노드에서 찾는 것입니다.

1
2
3
4
5
6
$(document).ready(function()
{
    $("#samplePage").find(".test1").css("border", "4px solid #f00");    
    console.log("#samplePage").find(".test1").length);
});
 
cs



- 핵심 03 : 첫 번째 자식 노드 찾기

사용법

1
2
3
4
5
- $대상.children().first()
- $대상.children().eq(0)
- $대상.children(":first")
- $대상.children(":eq(0)")
 
cs

예제 03. ul.menu의 자식 노드 중 첫 번째 자식 노드(인덱스 값으로 0번째)의 border를 "4px solid #f00"으로 변경해 주세요

풀이 01: 선택자를 이용하는 방법 (좀더 효율)
1
2
3
4
5
6
$(document).ready(function()
{
    var $menu = $("ul.menu");
    $menu.children(":first").css("border", "4px solid #f00");
});
 
cs



풀이 02: 메서드를 이용하는 방법

1
2
3
4
5
6
$(document).ready(function()
{
    ar $menu = $("ul.menu");               
     $menu.children().first().css("border", "4px solid #f00");
});
 
cs

* 선택자를 이용한 풀이 01가 좀더 효율적인 방법입니다.
풀이 02의 경우 children() 메서드와 first() 메서드를 두 번 호출해서 처리하는 반면
풀이 01의 경우 children() 메서드만을 호출해서 처리했기 때문입니다.
즉, jQuery 코드를 최적화하는 가장 쉽고 효과적인 방법은 jQuery 메서드를 사용할 때 가급적 적게 호출해주는 것입니다.



예제 04. 다음 풀이를 좀더 효율적인 코드로 변경해주세요

1
2
3
4
5
6
$(document).ready(function() 
{
    var $menu = $("ul.menu");
    $menu.children(":first").css("border", "4px solid #f00");
    $menu.children(":last").css("border", "4px solid #f00");
});
cs

1
2
3
4
5
6
7
$(document).ready(function() 
{
    var $menu = $("ul.menu");
    var $children = $menu.children(); // children() 메서드 함수의 중복을 없애기 위해 
    $children.first().css("border", "4px solid #f00");
    $children.last().css("border", "4px solid #f00");
});
cs


예제 05. 다음 실행화면처럼 각 <div> 태그 노드의 첫 번째 자식 노드를 border 속성을 "4px soild #f00"으로 변경해 주세요

1
2
3
4
5
6
$(document).ready(function() 
{
    $("div").find(":first").css("border", "4px solid #f00"); // 선택자를 이용하는 
    또는
    $("div").find().first().css("border", "4px solid #f00"); // 메소드를 이용하는 방법
});
cs

- 핵심 04 : 마지막 자식 노드 찾기

사용법

1
2
3
4
5
6
7
$대상.children().last()
$대상.children(":last")
$대상.children().eq($대상.children().length-1)
$대상.children().(":eq("+$대상.children().length-1)+")")
$대상.children().eq(-1)
$대상.children(":eq(-1)")
 
cs

예제 06. ul.menu의 자식 노드 중 마지막 번째 자식 노드(인덱스 값으로 0번째)의 border를 "4px solid #f00"으로 변경해 주세요
1
2
3
4
5
$(document).ready(function() 
{
    var $menu = $("ul.menu");
    $menu.children(":last").css("border", "4px solid #f00");
}
cs


- 핵심 05 : n번째 자식 노드 찾기

사용법

- $대상.children().eq(index) // 메서드

- $대상.children(":eq("+index+")") // 선택자

* 이경우도 가급적 메소드 호출을 줄일 수 있는 선택자를 이용하는 것이 더 효과적입니다.


예제 07. ul.menu의 바로 하위 자식 노드 중 두 번째 자식 노드(인덱스 값으로 1번째)의 border를 "4px solid #f00"으로 변경해 주세요.

1
2
3
4
5
$(document).ready(function() 
{
    var $menu = $("ul.menu");
    $menu.children(":eq(1)").css("border", "4px solid #f00");
});
cs



























Posted by 너래쟁이
: