$('div#main p').first() // id가 main인 <div> 태그의 첫번재 <p> 태그 선택 $('div#main p').last() // id가 main인 <div> 태그의 마지막 <p> 태그 선택 $('div#main p').eq(1) // id가 main인 <div> 태그의 두 번째 <p> 태그를 선택한다. 인덱스는 0부터 시작 $('div').filter(".middle") // <div>태그 중에서 클래스 속성 값이 middle인 것을 선택 $('div).not('.middle') // <div>태그 중에서 클래스 속성 값이 middle이 아닌 것을 선택 $('li').has('ul') // <li>태그 자손 중에 <ul>태그가 있는 <li>태그 선택
*** Selectors의 :first vs Traversing의 first() => 선택된 집합에서 첫번째 노드를 반환하는 것에는 차이가 없다. 다만 Selector의 :first보다 Travesing의 first()가 더 최신 버전이기 때문에 필터링하는 속도가 빠르고 여러 가지 메서드를 연속해서 나열할 수 있는 메서드 체인 방식의 표기에 더 적합한다. => 전체 div 노드에 click 이벤트를 설정하고 첫번재 div노드의 배경색을 변경하는 코드를 작성하면 다음과 같은 차이가 있다.
트리 구조 탐색(Tree Traversal) : DOM Tree 구조를 기반으로 찾아가는 방식
메서드
설명
children()
선택한 노드의 모든 자식 노드를 선택
find()
선택한 노드의 자손 노드 중 조건에 맞는 노드를 선택
next()
선택한 노드의 다음 노드를 선택
nextAll()
선택한 노드의 다음 모든 노드를 선택
parent()
선택한 노드의 부모 노드를 선택
parents()
선택한 노드의 모든 부모 노드를 선택
prev()
선택한 노드의 이전 노드를 선택
prevAll()
선택한 노드의 모든 이전 노드를 선택
closest()
선택한 노드를 포함하면서 가장 가까운 상위 노드를 선택
nextUntil()
다음에 위치한 노드를 조건에 맞을 때까지 찾는다.
parentsUntil()
조건이 참이 될 때까지 부모 노드를 찾는다.
prevUntil()
이전에 위치한 노드를 조건에 맞을 때까지 찾는다.
siblings()
형제 노드들을 모두 찾는다.
*활용도가 빈도가 높은 트리 구조 탐색
$('div#container').children('p') // div#container 태그의 자식 태그들 중에서 <p> 태그를 모두 선택한다. 자손 레벨에서 찾지 않고 자식 레벨에서만 찾는다. $('div#container').find('p') // div#container 태그의 자손 태그들 중에서 <p> 태그를 모두 찾아 선택. children()과 find()의 차이점은 자식까지 찾느냐, 자손까지 찾느냐이다. $('p#part1').prev() // id값이 part1인 <p> 태그의 바로 앞에 위치한 노드를 선택. 매개 변수로 찾고 싶은 노드를 전달 할 수 있음. $('p#part1').next() // id값이 part1인 <p> 태그의 바로 다음에 위치한 노드를 선택. 매개 변수로 찾고 싶은 노드를 전달 할 수 있음. $('p#part1').siblings() // id값이 part1인 <p> 태그의 형제 노드 선택. 매개 변수로 찾고 싶은 노드를 전달 할 수 있음. $('p#part1').parent() // id값이 part1인 <p> 태그의 부모 노드 선택
*선택자 ancestor descendant : 조상(ancestor)에 속한 자손(descendant)을 찾는 선택으로, 하위의 자손 태그가 몇 단계 아래의 계층에 있느냐와 상관없이 모두 선택한다. parent > child : parent에 속해 있는 <child> 태그를 선택한다. prev + next : 현재 선택된 <prev> 태그를 기준으로 바로 뒤에 오는 첫 번째 형제 태그를 선택한다. prev ~ siblings : 현재 선택된 <prev> 태그를 기준으로 바로 뒤부터 형제 태그를 모두 선택한다.
$("div#container li") // id속성이 #container인 <div> 태그의 자손 태그 중 <li> 태그를 모두 선택 $("div > p") //<div> 태그의 자식 태그 중(자손 태그는 포함하지 않음) <p> 태그를 선택 $("#first + li") //id속성이 first인 노드를 찾은 후, 바로 그 다음 형제(li) 노드를 선택 $("#second ~ li") // id속성이 second인 노드를 선택한 것을 기준으로 다움에 오는 형제들을 모두 선택. 단, 찾을 li 태그는 모두 같은 부모를 갖고 있는 형제 관계인 것만 찾는다. siblings라는 이름에서 알 수있 듯이, 복수 형재를 선택한다.
***문서 준비 이벤트 jQuery에서 문서 준비 이벤트는 웹 브라우저가 HTML의 DOM을 모두 로드할 때를 알려주는 이벤트로, <head> 태그에 jQuery 코드를 삽입할 경우에는 문서 준비 이벤트를 반드시 사용해야 한다.
***문서 준비 이벤트를 사용해야 하는 경우 <head> 태그에 jQuery 코드를 넣을 때에는 문서 준비 이벤트가 필요하다. 문서 준비 이벤트는 ready이다. HTML을 동적으로 조작하기 위해서는 HTML 문서를 모두 로딩해야만 그 다음에 동작을 가하는 jQuery나 Javascript 코드가 정상적으로 작동된다. jQuery에는 ready 이벤트와 똑같은 효과를 나타내는 것이 있는데, jQuery() 함수에는 매개 변수로 직접 함수를 넘겨주면 이 함수는 DOM이 모두 로딩되고 난 후에 실행된다. 아래의 3가지 코드는 동일한 의미를 갖는다.
jQuery(document).ready( function() { code } );
= jQuery( function() { code } )
= $( function() { code } )
***문서 준비 event를 사용하지 않는 경우 <body> 문서의 맨 마지막 </body> 전에 jQuery 코드나Javascript 코드를 삽입하면 된다. 왜냐하면 필요한 모든 HTML이 모두 로딩되었고, 그 다음에 동작하는 jQuery 코드가 작동되면서 ready 이벤트가 필요 없어졌기 때문이다.
<body> <script> // 이 부분은 document ready event가 필요 없다. </script> </body>
***따옴표 jQuery에서는 $() 함수 안에 따옴표를 사용하여 요소를 감싸는데, 이때 따옴표는 쌍따옴표와 홑따옴표 구별 없이 사용된다. 여기서 주의 할 점은 쌍따옴표는 쌍따옴표로, 홑따옴표는 홑따옴표로 끝나야 한다.
1. jQuery의 핵심은 jQuery() 함수이다. 모든 jQuery의 시작은 jQuery()함수를 거쳐햐 한다. 이 함수를 통해 리턴되는 결과는 모두 jQuery 객체로서 jQuery의 수많은 기능들을 사용할 수 있게 된다. jQuery 명령들을 잘 사용하기 위해서는 함수의 용도와 사용법에 대해 잘 알고 있어야 한다.
2. jQuery()함수는 ()안에 들어가는 형식에 따라 3가지로 처리된다. 2-1. jQuery()함수 내부에 selector를 매개 변수로 넣어 jQuery 객체를 만들 수 있다. jQuery('h1') // DOM에서 h1 노드를 모두 선택하여 jQuery 객체로 만들어 준다. jQuery('ul h1') // DOM에서 ul 노드 내부에 있는 li 노드를 모두 선택하여 jQuery 객체로 만들어 준다.
2-2. jQuery()함수 내부에 HTML 문자열을 입력하면 jQuery 객체를 직접 만들 수 있다.
Javascript에서 노드를 동적으로 만드는 createElement() 메서드와 같은 기능을 한다. jQuery 내부에서는 반드시 createElement()메서드를 사용하여 처리를 한 것을 알 수 있다.
2-3. jQuery()의 괄호 안에 함수가 들어가는 경우 (문서 준비 이벤트) 이 함수는 웹 브라우저가 HTML문서를 읽어 DOM Tree를 생성한 직후에 실행되는 콜백함수* *콜백함수: 스스로 부르는 함수, 특정 조건을 만족하여 스스로 호출되는 함수
이 방법은 jQuery를 <head> 태그 내에서 작성할 때에 반드시 사용해야 한다. 왜내하면 웹 브라우저는 <body>보다 <head>를 먼저 로딩하기때문에 <body>의 내용들이 로딩 전이라면 jQuery가 body의 노드들을 읽을 수 없기 때문이다.
*jQuery jQuery(function() { alert("문서가 모두 읽어졌습니다.")} );
*Javascript
window.onload = function() { alert("문서가 모두 읽어졌습니다."); };
*jQuery vs Javascript 차이점 window.onload - HTML 로딩이 끝난 후에 실행되는 것으로, 이미지와 같은 콘텐츠가 모두 불려진 후에 콜백함수 호출 jQuery(function) - 웹브라우저가 DOM Tree를 생성하게 될 때에 콜백함수가 호출된다. 이는 HTML의 뼈대만 읽고 콜백함수를 호출하고 난 후, 이미지나 콘텐츠 등을 나중에 Load하는 것이다.