JQuery
JQuery는 웹페이지에 포함시킬 수 있는 하나의 자바스크립트 파일이다. 자바스크립트를 필요로하는 작업들을 일관된 구조로 처리할 수 있는 방법을 가르쳐주고, 주요 브라우저에서 동일하게 동작한다는 장점이 있다.
https://jquery.com/ 에서 다운로드 받을 수 있다.
확장자가 min.js인 파일들이 있다. 이느 minification 과정을 통해 불필요한 공백과 줄바꿈 문자가 제거된 파일이다. 크기를 최소화했기 때문에 load시에 이점이 있다. 난독화 수준으로 되어있기 때문에 내부동작을 파악하기 위해서는 사용하기 적합하지 않다.
<!-- HTML -->
<div id='myDiv'></div>
/*
* 1. JQuery는 CSS Selector 형식으로 요소를 찾는다. (DOM Query와 동일 작업 수행)
* 2. 요소는 JQuery 메소드로 여러 조작을 할 수 있다.
*/
$('li.hot').addClass('myDiv');
요소 탐색
기본 셀렉터
Selector | 설명 |
---|---|
* | 모든 요소 |
element | 지정된 요소 이름을 가진 모든 요소 |
#id | 지정된 id 값을 가진 모든 요소 |
.class | 지정된 class 값을 가진 모든 요소 |
selector1, selector2 | 하나 이상의 셀렉터와 일치하는 모든 요소들 |
계층 탐색
Selector | 설명 |
---|---|
ancestor descendant | ancestor 요소의 자식 및 자손 요소들 |
parent > child | parent의 요소의 직접적인 자식 요소들 |
previous + next | previous 요소 바로 다음에 sibling 관계로 next가 오면 선택 |
previous ~ next | previous 요소 다음에 sibling 관계로 next가 오면 선택 |
기본 필터
Selector | 설명 |
---|---|
:not(selector) | 해당 셀렉터 이외 나머지 요소들 ex) div:not(‘#summary’) |
:first | 선택된 요소 중 첫번째 요소 |
:last | 선택된 요소 중 마지막 요소 |
:even | 선택된 요소 중 인덱스 번호가 짝수인 요소 |
:odd | 선택된 요소 중 인덱스 번호가 홀수인 요소 |
:eq(index) | 선택된 요소 중 해당 인덱스 번호를 가진 요소 |
:gt(index) | 선택된 요소 중 해당 인덱스 번호보다 큰 인덱스 번호를 가진 요소들 |
:lt(index) | 선택된 요소 중 해당 인덱스 번호보다 작은 인덱스 번호를 가진 요소들 |
:header | <h1> ~ <h6> |
:animated | 현재 애니메이션이 적용된 요소들 |
:focus | 현재 포커스를 가지고 있는 요소 |
콘텐츠 필터
Selector | 설명 |
---|---|
:contains(‘text’) | 해당 텍스트를 가지고 있는 요소들 |
:empty | 자식 요소가 없는 요소들 |
:parent | 자식 요소가 있는 요소들 |
:has(selector) | 선택된 요소들 중 해당 셀렉터를 가지고 있는 요소들 |
가시성 필터
Selector | 설명 |
---|---|
:hidden | 숨겨진 요소들 |
:visible | 보이는 요소들 |
자식 요소 필터
Selector | 설명 |
---|---|
:nth-child(expr)) | :nth-child(3n+2)는 2, 5, 7, … 번째 자식 요소를 뜻함 |
:first-child | 첫 번째 자식 요소 |
:last-child | 마지막 자식 요소 |
:only-child | 자식이 하나인 요소 |
특성 필터
Selector | 설명 |
---|---|
[attribute=‘value’] | 특성이 지정된 값과 일치하는 요소들 ex) $(div[name=‘aaa’]) |
[attribute!=‘value’] | 특성이 지정된 값과 일치하지 않는 요소들 |
[attribute^=‘value’] | 특성이 지정된 값으로 시작하는 요소들 |
[attribute$=‘value’] | 특성이 지정된 값으로 끝나는 요소들 |
[attribute*=‘value’] | 특성이 지정된 값을 포함하는 요소들 |
[attribute|=‘value’] | 특성이 지정된 값과 일치하거나, 지정된 값에 하이픈을 덧붙인 구조인 요소들 ex) [class|=‘color’]라면 color, color-red, color-blue, … 등의 요소를 선택 |
[attribute~=‘value’] | 특성이 공백으로 나열한 값 중 하나인 요소 ex) [class~=‘myClass’]라면 class = ‘myClass myClass2’ 등으로 설정된 요소 선택 |
[attribute1][attribute2] | 지정된 특성 중 하나를 가진 요소들 |
Form
Selector | 설명 |
---|---|
:input | input tag |
:text | type text |
:password | type password |
:radio | type radio |
:checkbox | type checkbox |
:submit | type submit |
:image | type image |
:reset | type reset |
:button | type button |
:file | type file |
:selected | 드롭다운 리스트에서 선택된 모든 요소들 |
:enabled | 활성화된 폼 요소들 |
:disabled | 비활성화된 폼 요소들(CSS disabled 걸린 것들) |
:checked | 선택된 라디오 버튼이나 체크박스 요소들 |
요소에 대한 작업
Page Load
Method | 설명 |
---|---|
.ready() | 브라우저에 DOM이 로드되자마자 실행 |
.load() | .on()으로 대체. 페이지 및 이미지, css, 스크립트 모두 로드된 후에 실행 |
$(document).ready(function(){
...
});
// 약식 표현
$(function(){
...
});
Content 가져오기
Method | 설명 |
---|---|
.html() | 첫 번째 요소의 HTML 코드를 가져옴 |
.text() | 집합 내 모든 요소와 텍스트들을 리턴 |
<body id='myBody'>
<ul>
<li> <div>first</div> </li>
<li> <div>second</div> </li>
<li> <div>third</div></li>
</ul>
</body>
let a = $('ul').html();
console.log(a);
/*
* 출력 결과
* <li> <div>first</div> </li>
* <li> <div>second</div> </li>
* <li> <div>third</div></li>
*/
let a = $('li').html();
console.log(a);
/*
* 출력 결과
* 첫 번째 요소의 내용만 가져옴
* <div>first</div>
*/
let a = $('ul').text();
console.log(a);
/*
* 출력 결과
* first
* second
* third
*/
let a = $('li').text();
console.log(a);
/*
* 출력 결과
* <li> 요소의 모든 텍스트를 포함해서 가져옴
* first second third
*/
Content 수정
Method | 설명 |
---|---|
.html(htmlString) | 선택된 모든 요소에 html 설정 |
.text(string) | 선택된 모든 요소에 텍스트 설정 |
.replaceWith(content) | 선택된 모든 요소에 내용 추가 |
.remove() | 선택된 모든 요소 삭제 |
Content 삽입
Method | 설명 |
---|---|
.before(content) | 선택된 요소 바로 이전에 삽입 (sibiling) |
.after(content) | 선택된 요소 바로 다음에 삽입 (sibiling) |
.prepend(content) | 선택된 요소 내부 앞에 삽입 (child) |
.append(content) | 선택된 요소 내부 뒤에 삽입 (child) |
특성 값
Method | 설명 |
---|---|
.attr(attributeName) | 요소의 id, class 등의 특성을 가져온다 |
.removeattr(attributeName) | 지정된 특성을 삭제한다 |
.addClass(className) | 지정된 클래스를 추가한다 |
.removeClass(className) | 지정된 클래스를 삭제한다 |
객체 집합 내 요소 다루기
// li 요소 각각에 대한 작업을 별도로 지정할 수 있다.
$('li').each(function(){
let txt = $(this).text();
$(this).text(txt + txt); // 해당 텍스트 두 번 반복
});
이벤트 처리
on 메소드는 모든 이벤트를 처리할 수 있다.
.on(events[, selector][, data], function(e));
$('li').on('click', function(e){
alert('click!');
});
$("p").each(function(i){
$(this).on("click", {x:i}, function(event){
alert("The " + $(this).index() + ". paragraph has data: " + event.data.x);
});
});
이벤트 객체
속성 | 설명 |
---|---|
type | 이벤트의 종류 |
which | 눌려진 버튼이나 키 |
data | 이벤트가 발생했을 때 함수에 전달된 추가 정보들을 가지고 있는 객체 표현식 |
target | 이벤트가 발생한 DOM 요소 |
pageX | viewport 왼쪽 모서리로부터 마우스까지의 위치 |
pageY | viewport 상단으로부터 마우스까지의 위치 |
timeStamp | 이벤트가 발생한 시점의 타임스탬프 |
메소드 | 설명 |
---|---|
.preventDefault() | 이벤트의 기본 동작 취소(submit 동작 등) |
.stopPropagation() | 상위 객체로의 버블링 중단 |
효과
기본 효과
메소드 | 설명 |
---|---|
.show() | 선택된 컨텐츠를 노출시킨다 |
.hide() | 선택된 컨텐츠를 숨긴다 |
.toggle() | 토글식을 번갈아 나타낸다 |
페이드 효과
메소드 | 설명 |
---|---|
.fadeIn() | 요소를 불투명하게 만들어 서서히 나타나는 페이드인 효과 |
.fadeOut() | 요소를 투명하게 서서히 사라지게하는 페이드아웃 효과 |
.fadeTo() | 선택된 요소의 불투명도를 조절한다 |
.fadeToggle() | 선택된 요소의 불투명도를 조정하여 숨기거나 보이게 한다 |
슬라이딩 효과
메소드 | 설명 |
---|---|
.slideUp() | 요소가 슬라이드 되어 사라지는 효과 |
.slideDown() | 요소가 슬라이드 되어 나타나는 효과 |
.slideToggle() | 선택된 요소에 슬라이드 효과를 적용하여 나타나거나 사라지게 한다 |
임의 효과
메소드 | 설명 |
---|---|
.delay() | 다음 아이템의 실행을 잠시 지연시킨다 |
.stop() | 현재 실행 중인 애니메이션을 중단한다 |
.animate() | 새로운 임의의 애니메이션을 생성한다 |
DOM 탐색
메소드 | 설명 |
---|---|
.find(selector) | 셀럭터와 일치하는 요소들을 리턴 |
.closest(selector) | 셀렉터와 일치하는 부모~최상위 요소를 모두 리턴 |
.parent() | 부모 요소를 리턴 |
.parent() | 모든 부모 요소를 리턴 |
.children() | 모든 자식 요소를 리턴 |
.siblings() | 모든 형제 요소를 리턴 |
.next() | 바로 다음 요소를 리턴 |
.nextAll() | 이후 모든 요소를 리턴 |
.prev() | 바로 이전 요소를 리턴 |
.prevAll() | 이전 모든 요소를 리턴 |
필터링
메소드 | 설명 |
---|---|
.filter(selector) | 해당 셀렉터를 포함한 요소들로 필터링 한다 |
.find(selector) | 해당 셀렉터를 가진 자식 요소들을 찾아 리턴한다 |
.not(selector) | 해당 셀렉터와 일치하지 않는 요소들을 리턴한다 |
.has(selector) | 해당 셀렉터를 가진 자식을 가지는 요소를 리턴한다 |
.contains(text) | 지정한 텍스트를 가진 모든 요소를 리턴한다 |
인덱싱
메소드 | 설명 |
---|---|
.eq(index) | 선택된 요소 중 해당 인덱스 번호를 가진 요소 |
.gt(index) | 선택된 요소 중 해당 인덱스 번호보다 큰 인덱스 번호를 가진 요소들 |
.lt(index) | 선택된 요소 중 해당 인덱스 번호보다 작은 인덱스 번호를 가진 요소들 |
요소 삭제, 복사
메소드 | 설명 |
---|---|
.remove() | 요소를 삭제한다 |
.detach() | 요소를 삭제하나 메모리에는 남아있다. |
.empty() | 요소의 하위 요소와 자식 노드들을 제거한다 |
.unwrap() | 부모 요소들을 제거한다 |
.clone() | 객체 집합의 복사본을 만든다 |
JQuery Method의 특징
-
Loop
순수 자바스크립트 같은 경우 여러 개의 요소에 동일한 작업을 하기 위해서는 반복문을 통해서 루프를 돌아야 한다. 하지만, JQuery 같은 경우에는 implicit iteration을 제공하며 객체집합 내의 모든 요소를 한 번에 수정할 수 있다.// 모든 div요소에 myClass 클래스를 추가 $('div').addClass('myClass') // 위 동작은 다음과 같다 var divEl = document.getElementByTagName('div'); for(var i = 0 ; i < divEl.length ; i++){ divEl[i].setAttribute('class', 'myClass'); }
-
Chaining
여러 개의 메소드를 동시에 적용할 수 있다.$('div').hide().delay(500).fadeIn(1400);
참고
- 장현희, 자바스크립트 & 제이쿼리 (인터랙티브 프론트엔드 웹 개발 교과서)