반응형
jQuery
- 크래스 플랫폼을 지원하여 모든 브라우저에서 동일하게 동작하게하는 javascript library
- 네이티브 DOM API보다 직관적이고 편리한 API 제공
- Event, Ajax, Animation 효과를 쉽게 사용
설치
1. jquery-3.XX.X.min.js 파일 다운로드 시 웹 특정 경로에 저장
2.
- CDN (Content Delivery Network)
- jQuery API : http://api.jquery.com
기본 구문
$(selector).function(); // DOM객체들을 담은 래퍼세트 반환 == document.getElementXXX()
$(document).ready(function() {
//TODO...
});
- Selector를 사용하여 DOM 객체를 탐색하고, 반환된 래퍼세트를 통해 함수를 수행
- jQuery로 DOM을 탐색하기 전에, 웹 브라우저에 문서가 모두 로드되어 있어야 한다.
<body>
<p id="p1">안녕</p>
<button>클릭</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("#p1").css("background", "orange");
});
});
</script>
</body>
- 클릭하면 배경색을 변경하는 예제
<body>
<table>
<tr><th>팀명</th><th>이름</th><th>포지션</th></tr>
<tr><td>두산</td><td>정정정</td><td>우익수</td></tr>
<tr><td>삼성</td><td>강강궁</td><td>포수</td></tr>
<tr><td>키움</td><td>김주아</td><td>1루수</td></tr>
<tr><td>롯데</td><td>박우연</td><td>좌익수</td></tr>
</table>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("tr:eq(0)").css("background","gray");
$("td:nth-child(3n+1)").css("background", "orange");
$("td:nth-child(3n+2)").css("background", "pink");
$("td:nth-child(3n)").css("background", "cyan");
$("td:contains('익수')").css("background", "green");
});
</script>
</body>
- 특정 배경을 변경하는 예제
Selector
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jquery</title>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$(function() {
$("h1#target").css("color", "orange");
});
});
</script>
</head>
<body>
<h1>JavaScript.</h1>
<h1 id="target">jQuery.</h1>
<h1>Servlet.</h1>
</body>
</html>
- Element Selector를 사용하여 색상 변경
DOM 계층 구조
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jquery</title>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("div > ul").css("background", "#cc66ff");
$("ul.site1 > li").css("color", "cyan");
$("ul.site2 li").css("color", "pink");
});
</script>
</head>
<body>
<h3>jQuery DOM Hierarchy Selector</h3>
<p>검색을 도와주는 사이트는 여러가지가 있습니다.</p>
<div>
<ul class="site1">
<li>다음 : www.daum.net</li>
<li>네이트 : www.nate.com</li>
<div>
<li>
<ul>
<li>네이버블로그 : blog.naver.com</li>
<li>네이버카페 : cafe.naver.com</li>
</ul>
</li>
</div>
<li>CGV : www.cgv.co.kr</li>
</ul>
<ul class="site2">
<li>다음 : www.daum.net</li>
<li>네이트 : www.nate.com</li>
<div>
<li>
<ul>
<li>네이버블로그 : blog.naver.com</li>
<li>네이버카페 : cafe.naver.com</li>
</ul>
</li>
</div>
<li>CGV : www.cgv.co.kr</li>
</ul>
</div>
</body>
</html>
Attribute Selector
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jquery</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$(function () {
$("#button1").click(function () {
clear(); $("input[name]").css("background", "silver");
});
$("#button2").click(function () {
clear(); $("input[value='jQuery']").css("background", "silver");
});
$("#button3").click(function () {
clear(); $("#targets > input[value!='jQuery']").css("background", "silver");
});
$("#button4").click(function () {
// 셀렉터 단어 포함 (시작, 띄어쓰기 구분)
clear(); $("input[value~='셀렉터']").css("background", "silver");
});
$("#button5").click(function () {
// 셀렉터가 들어간 모두
clear(); $("#targets > input[value*='셀렉터']").css("background", "silver");
});
$("#button6").click(function () {
// 셀렉터로 시작
clear(); $("input[value^='셀렉터']").css("background", "silver");
});
$("#button7").click(function () {
// 셀렉터로 끝남
clear(); $("input[value$='셀렉터']").css("background", "silver");
});
$("#btn_clear").click(function () {
clear();
});
});
function clear() {
$("input[type='text']").css("background", "white");
}
});
</script>
</head>
<body>
<h2>jQuery Attribute Selector</h2>
<div id="targets">
<input type="text" name="case1" value="jQuery" /><br />
<input type="text" name="case2" value="jQuery셀렉터" /><br />
<input type="text" name="case3" value="jQuery셀렉터 테스트" /><br />
<input type="text" name="case4" value="셀렉터 테스트" /><br />
<input type="text" name="case5" value="셀렉터테스트" /><br />
<input type="text" name="case6" value="테스트" /><br />
</div>
<div>
<input type="button" id="button1" value="name속성을 가짐" />
<input type="button" id="button2" value="'jQuery' 일치" />
<input type="button" id="button3" value="'jQuery' 미일치" />
<input type="button" id="button4" value="'셀렉터' 단어 포함" />
<input type="button" id="button5" value="'셀렉터' 포함" />
<input type="button" id="button6" value="'셀렉터'로 시작" />
<input type="button" id="button7" value="'셀렉터'로 끝남" />
<input type="button" id="btn_clear" value="clear" />
</div>
</body>
</html>
- $(selector[attr]) : attr을 속성으로 가지는 문서객체 선택
- $(selector[attr="value"]) : attr의 속성값이 value와 같은 문서객체 선택
- $(selector[attr~="value"]) : attr의 속성값이 공백과 함께 value를 포함하는 문서객체 선택
- $(selector[attr^="value"]) : attr의 속성값이 value로 시작하는 문서객체 선택
- $(selector[attr$="value"]) : attr의 속성값이 value로 끝나는 문서객체 선택
- $(selector[attr="value"]) : attr의 속성값이 *value를 포함**하는 문서객체 선택
Filter Selector
- :not(filter) : 주어진 선택자와 일치하지 않는 모든 요소 선택
- :contains(str) : 텍스트 str을 포함하는 요소만 선택
- :nth-child(n) : n번째 자식 요소를 선택 (n이 2이면 2번째 자식, n이 3n+1이면 4, 7, 10 ~)
- :eq(n) : n번째로 일치하는 요소를 선택 (음수라면 파이썬과 같이 뒤에서부터)
- :gt(n) : n번째 (포함X) 이후 요소를 선택
- :lt(n) : n번째 (포함X) 이전 요소를 선택
- :has(f) :주어진 선택자와 일치하는 하나 이상의 요소를 포함하는 요소를 선택
$("tr:eq(0)").css();
$("td:nth-child(3n)").css();
위치기반 필터선택자
$(document).ready(function() {
$(#id tr:first).css("background", "black");
})
jQuery method
var array = [
{ name : '홍길동', link : 'http://naver.com'},
...
]
var outHtml = '';
$.each(array, function(index, item){
outHtml += '<a href=""' + item.link +'">';
outHtml += '<h2>' + item.name + '</h2>';
outHtml += '</a>';
});
document.body.innerHTML = outHtml;
$("h2").each(function(index, item) {
$(item).addClass("high-light-" + index);
})
- index : 배열 인덱스, item : 반복하는 요소객체
$("h2").filter(function(index){
return index % 3 == 0; // return 값이 true인 요소만 새로운 래퍼세트에 포함
}).css({
background : "blank",
color : "white"
});
- 주오진 조건으로 걸러내는 filter 메서드
$("h2").css("background", "silver")
.filter(":even").css("color", "white").end()
.filter(":odd").css("color", "red");
- end() 메서드를 호출하면 이전 래퍼세트로 돌아간다.
add(), not()
- $("element").add("element"); : 주어진 조건을 만족하는 요소를 추가한 새로운 래퍼세트 반환
- $("element").not("element"); : 주어진 조건에 해당하는 요소를 제거한 새로운 래퍼세트를 반환
is()
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
// 체크박스 중 name이 checkedFalse이고
// 체크되어 있으면 체크를 해제함
$("input[type='checkBox']").each(function () {
if ($(this).is("[name='checkedFalse']") && $(this).is(":checked")) {
$(this).attr("checked", false);
}
});
});
</script>
<h3><input type="checkBox" name="checkedFalse" checked="checked"/>체크박스1</h3>
<h3><input type="checkBox" checked="checked"/>체크박스2</h3>
<h3><input type="checkBox" checked="checked"/>체크박스3</h3>
- 기존 래퍼세트가 주어진 선택자와 일치하는지 여부를 반환 (true/false)
find()
<div id="findArea">
<h1>첫번째</h1>
<h2 class="myClass">두번째</h2>
<h3 class="myClass">세번째</h3>
<h4>네번째</h4>
<div><h4 class="myClass">div태그안</h4></div>
</div>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
// findArea 하위 요소 중
// class가 myClass인 요소들의 배경색을 silver로 변경
$("#findArea").find(".myClass") .css("background", "silver");
});
</script>
- 래퍼세트의 모든 요소들에 대하여 주어진 선택자를 만족하는 모든 자손 요소 선택
- filter는 걸러내기 위해 사용하지만, find()는 하위 자손을 탐색하기 위해 사용
DOM 객체
- jQuery는 DOM 요소의 속성이나 class, style을 제어하는 DOM 특성제어 메서드를 제공
attr()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var srcValue = $('img').attr('src');
alert('src1 : ' + srcValue);
$('img').each(function (i, element) {
var value = $(this).attr('src');
alert('src2 : ' + value);
});
$('img').attr({ width: 100, height: 150 });
alert('width와 height를 200으로 설정!!');
$('img').removeAttr('height');
alert('height 속성 제거!!!');
$('img').attr('width', function (i) {
return (i + 1) * 100;
});
});
</script>
</head>
<body>
<img src="../img/ice_americano.jpg" width="200" />
<img src="../img/ice_cafelatte.jpg" width="200" />
<img src="../img/ice_cafemocha.jpg" width="200" />
<img src="../img/ice_vanillalatte.jpg" width="200" />
</body>
Class 속성 제어
<body>
<h1>안녕하세요1.</h1>
<h2 id="col1">안녕하세요2.</h2>
<h3 name="col2">안녕하세요3.</h3>
<h4 class="col3">안녕하세요4.</h4>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style type="text/css">
.col1 { color : orange; }
.col2 { color : magenta; }
.col3 { color : steelblue; }
</style>
<script type="text/javascript">
$(document).ready(function() {
$("#col1").addClass("col1");
$("h3[name='col2']").addClass("col2");
$(".col3").removeClass(".col3");
$("h1").click(function() {
$(this).toggleClass("col3");
})
});
</script>
</body>
- addClass, removeClass, toggleClass 사용 예제 - 클릭시마다 색 변경 예제
Style 속성 제어
var colors =["silver", "lime"];
$("h2").css("color", function(index) {
return colors[index % 2];
});
HTML과 텍스트 조회
<body>
<div id="div1">
아이디 : <input type="text" placeholder="아이디입력.." /><br />
<span>사용자 설정.</span><br />
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var html = $("#div1").html();
var text = $("#div1").text();
alert(html);
alert(text);
$("#div1").append(html).append(text);
});
</script>
</body>
- html()과 text()는 DOM 객체 내부를 조회하는 메서드
- html은 태그를 인식하지만 text는 태그를 인식하지 않는다. 자바스크립트의 innerHTML, textContent와 비슷
DOM 객체 추가
<script type="text/javascript">
$(document).ready(function() {
$("<h2>안녕하세요</h2>")
.css("color", "steelblue")
.appendTo("body"); // apendTo : 바디의 맨 뒤에 붙이는 기능
$("<a/>")
.attr("href", "https://www.sasca37.tistory.com")
.text("블로그")
.appendTo("body");
});
</script>
- $() 함수는 선탁자를 수행하는 기능 뿐아니라 DOM 객체를 생성하는 기능 제공
DOM 객체 삭제
<body>
<div>
<h2 id="h1">안녕하세요1</h2>
<h2 id="h2">안녕하세요2</h2>
<h2 id="h3">안녕하세요3</h2>
</div>
<input type="button" id="btn1" value="두번째 h2 삭제"/>
<input type="button" id="btn2" value="div 비움"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#btn1").click(function() {
$("#h2").remove();
});
$("#btn2").click(function() {
$("div").empty();
});
});
</script>
</body>
- remove() 메서드는 래퍼세트의 모든 요소를 HTML 문서에서 삭제하고, 삭제한 내용을 반환
- empty() 메서드는 래퍼세트의 모든 요소에 대해 하위 자식요소들을 삭제한 결과를 반환
DOM 객체 삽입
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("img").css("width", 200);
setInterval(function () {
$("img").first().appendTo("body");
// $("body").append($("img").first());
}, 2000);
});
</script>
- 처음 요소를 바디의 맨뒤에 추가하는 방식으로 순서가 2초마다 바뀌는 방식으로 만들 수 있다.
jQuery Event
- 선택된 DOM 객체의 이벤트에 지정한 핸들러를 연결하는 함수
- bind(eventType, data, listener)
- eventType : 핸들러를 할당할 이벤트 타입의 이름
- data : 핸들러 함수에서 사용할 데이터, 이벤트 인스턴스에 data라는 프로퍼티로 제공, 생략시 두번째 인자는 listener
- listener : 이벤트 발생시 수행되는 핸들러 함수
on()
- bind() 함수와 마찬가지로 DOM 객체에 이벤트 핸들러를 연결
- delegate(위임) 방식으로 사용할 경우 동적으로 생성한 DOM 객체에도 적용 가능 (때문에 bind 보단 on 권장)
- on(eventType, delegate selector, function(event){});
$("h2").on("click", function() {
$(this).html(function(index, html) {
return html +"*"; // 누를 때마다 * 증가
});
});
$("h2").on({
mouseenter: function() {
$(this).addClass("reverse");
},
mouseleave: function() {
$(this).removeClass("reverse");
}
});
off()
- on() 과 반대로 DOM 객체의 이벤트를 제거
- 선택된 DOM 객체의 특정 이벤트 또는 모든 이벤트를 제거할 수 있다.
$("#btn1").click(function() {
$("h2").off("click");
});
Input Event
$("form").submit(function(event) {
event.preventDefault();
})
$("#check").change(function() {
if ($(this).is(":checked")) {
$("#checkItem").children().prop("checked", true);
}
else {
$("#checkItem").children().prop("checked", false);
}
})
반응형