1. 제이쿼리
1) 제이쿼리 다운로드
- 제이쿼리 검색 후 compressed 버전 선택
- 다른 이름으로 저장
- vscode 실행(open folder - jquery 폴더 생성 후 .vscode 복사 - js 폴더 생성 후 아까 다운로드 받은 파일 넣을 것)
- jquery01~03.html 생성
2) 제이쿼리 함수
* jquery01.html(제이쿼리 선택자), jquery02.html(제이쿼리 문서 객체 조작 attr), jquery03.html(제이쿼리 문서 객체 조작 css)
- jquery01.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- jquery -->
<script src = "js/jquery-3.6.3.min.js"></script>
</head>
<body>
<input type="text" id="melon" value="홍길동">
<input type="text" class="apple">
<script>
// $("선택자로") 요소를 얻으면, 제이쿼리 시작 객체를 반환 해줍니다.
// $("선택자").제이쿼리함수() 를 이용해서 태그를 제어합니다.
// console.log( $("#melon")[0] ); //순수한 엘리먼트
// console.log( $("#melon") );
// var result = document.getElementById("melon").value;
//값을 얻음
var result = $("#melon").val();
console.log(result);
//값을 변경
$("#melon").val("변경할 값");
//
$(".apple").val("변경할 값");
</script>
</body>
</html>
- jquery02.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- jquery -->
<script src = "js/jquery-3.6.3.min.js"></script>
</head>
<body>
<input type="text" class="test1" id="xx">
<img src="#" class="test2">
<img src="#" class="test3" width="" height="">
<script>
//값을 얻음
// var xx = document.querySelector(".test1").id;
var x = $(".test1").attr("id"); //id 속성을 얻음
console.log(x);
//src 값을 변경
$(".test2").attr("src", "값을 변경");
//여러 속성을 한번에 변경
$(".test3").attr({
src: "값을 변경",
width: "200",
height: "200"
})
</script>
</body>
</html>
- jquery03.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- jquery -->
<script src = "js/jquery-3.6.3.min.js"></script>
</head>
<body>
<h3>스타일 제어</h3>
<ul class="test1">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<div class="box">box</div>
<div class="box">box</div>
<div class="box">box</div>
<div class="box">box</div>
<script>
//js
// var li = document.querySelectorAll(".test1 > li");
// for(var i = 0; i < li.length; i++){
// li[i].style.backgroundColor = "red";
// }
//css 속성을 변경
$(".test1 > li").css("backgroundColor", "red");
//css 속성을 확인
var color = $(".test1 > li").css("backgroundColor");
console.log(color);
//css 속성을 한번에 변경
$(".box").css({
backgroundColor : "red",
width: "200px",
heigth: "200px",
display: "inline-block"
})
</script>
</body>
</html>
* jquery04.html(제이쿼리 문서 조작 html), jquery05.html(제이쿼리 클래스 조작 addClass (), removeClass (),
toggleClass)
- jquery04.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- jquery -->
<script src = "js/jquery-3.6.3.min.js"></script>
</head>
<body>
<div class="test1"></div>
<div class="test2"></div>
<script>
//js
// document.querySelector(".test1").innerHTML = "<a href='#'>kkk</a>";
//위와 결과는 같음
//값을 변경
$(".test1").html("<a href='#'>kkk</a>"); //태그로 변경
$(".test1").html(""); //공백으로 변경
$(".test1").html("홍길동");
//값을 얻음
var result = $(".test1").html();
console.log(result);
//text() - 순수한 텍스트로 인식
$(".test2").text("<a href='#'>kkk</a>"); //텍스트로 인식 됨
</script>
</body>
</html>
- jquery05.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- jquery -->
<script src = "js/jquery-3.6.3.min.js"></script>
</head>
<body>
<button id="btn" class = "btn btn-default">클래스 조작</button>
<script>
//js
// document.getElementById("btn").classList.add("myBtn");
// document.getElementById("btn").classList.remove("myBtn");
$("btn").addClass("myBtn"); //클래스 추가
$("btn").removeClass("myBtn"); //클래스 삭제
</script>
<button id ="tog" class="dark">토글 형식</button>
<script>
$("#tog").click(function() {
// console.log(this)
// $(this).toggleClass("dark");
this.classList.toggle("dark");
})
</script>
</body>
</html>
3) 제이쿼리 이웃, 형제 노드 조작
* Jquery06.html(이웃, 형제 노드 조작)
- jquery06.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- jquery -->
<script src = "js/jquery-3.6.3.min.js"></script>
</head>
<body>
<table class="xxx">
<tr>
<th>번호</th>
<th>이름</th>
<th>버튼</th>
<th>테스트</th>
</tr>
<tr>
<td>1</td>
<td>홍길동</td>
<td>
<button type="button" class="btn">버튼</button>
</td>
<td>
<span><i class="test">테스트1</i></span>
<span >테스트2</span>
</td>
</tr>
<tr>
<td>2</td>
<td>이순신</td>
<td>
<button type="button" class="btn">버튼</button>
</td>
<td>
<span><i class="test">테스트1</i></span>
<span >테스트2</span>
</td>
</tr>
</table>
<script>
/*
1. closest("선택자") - 최근접 단일 부모를 선택합니다.
2. prev() - 이전 형제
3. next() - 다음 형제
4. siblings() - 모든 형제
5. first() - 첫번째 자식
6. last() - 마지막 자식
7. children - 모든 자식
8. find("선택자") - 특정 자식
*/
$(".btn").click(function() {
//this or e.target
// console.log(this);
// console.log(e.target);
// console.log( $(this).closest("td") ); //최근접 td 태그
// console.log( $(this).closest("tr") ); //최근접 tr 태그
// console.log( $(this).closest(".xxx") ); //최근접 xxx 클래스
// console.log( $(this).closest("td").prev() ); //이전 형제
// console.log( $(this).closest("td").next() ); //다음 형제
// console.log( $(this).closest("td").siblings() ); //모든 형제
// console.log( $(this).closest("tr").children() ); //모든 자식들
// console.log( $(this).closest("tr").children().first() ); //첫째
// console.log( $(this).closest("tr").children().last() ); //막내
console.log( $(this).closest("tr").find(".test")); //.test의 자식
console.log( $(this).closest("tr").find("span")); //span 태그 자식
})
</script>
</body>
</html>
4) 제이쿼리 이벤트 함수(많이 사용하므로 중요!)
* Jquery07.html(페이지 로딩 시 스크립트를 실행), Jquery08.html(클릭시 소괄호 안에 익명 함수 실행, 이벤트 위임 함수)
- jquery07.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- jquery -->
<script src = "js/jquery-3.6.3.min.js"></script>
</head>
<body>
<script>
//js - 페이지 로드 이후 실행하는 이벤트 - 페이지 별로 1개만 사용 가능
// window.onload = function(){
// console.log( $("#btn") )
// }
//jquery - 페이지 로드 이후 실행하는 함수: 여러개 사용 가능
$(document).ready(function() {
console.log( $("#btn") )
})
$(document).ready(function(){
console.log(2);
})
</script>
<button id="btn">도큐먼트 레디</button>
</body>
</html>
- jquery08.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- jquery -->
<script src = "js/jquery-3.6.3.min.js"></script>
</head>
<body>
<button id="btn">이벤트 등록</button>
<input type="text" id="tag">
<select id="sel">
<option>1</option>
<option>2</option>
</select>
<div style="background-color: red;" id="mos">마우스 이벤트</div>
<script>
//클릭
$("#btn").click(function(){
console.log("click");
})
//input 태그에 글 쓸 때마다 console.log 찍힘
$("#tag").keyup(function(){
console.log("key~");
})
//체인지(값 변경할 때마다 console.log 찍힘)
$("#sel").change(function(){
console.log("chan");
})
//마우스 관련 이벤트(mouseenter: 진입)
$("#mos").mouseenter(function(){
console.log("mouse enter");
})
$("#mos").mouseleave(function(){
console.log("mouse leave")
})
</script>
<hr/>
<h3>이벤트 위임 방식 on()</h3>
<div id="box">
</div>
<script>
setTimeout(function() {
var str = "";
str += "<a href='#'>태그1</a>";
str += "<a href='#'>태그2</a>";
str += "<a href='#'>태그3</a>";
$("#box").html(str);
}, 2000); //2초 뒤에 태그 생성
//어림도 없음
// $("a[href='#']").click(function(){
// console.log("a링크 실행");
// })
//(이벤트 종류, 위임시킬 선택자, 핸들러)
$("#box").on("click", "a", function() {
event.preventDefault; //고유 이벤트 중지
console.log("a링크 실행");
})
</script>
</body>
</html>
- 비동기 통신 Ajax
- 화면은 그대로인데 서버와의 통신을 통해서 데이터를 가지고 온다.
- 속성에 맞게 값만 넣어주면 됨
- * ContentType: 내가 데이터를 줄건데 이건 json, text 형식이다 하고 적어주는 형식
- get 방식으로 보내는 예제: 쿼리 파람일 때
* RestBasicController, jquery09.html
- RestBasicController
//Jquery - ajax 예시
@PostMapping("/getAjax")
@CrossOrigin({"http://127.0.0.1:5501",
"http://localhost:5501" })
public Map<String, Object> getAjax(@RequestBody SimpleVO simpleVo){
//받은 데이터
System.out.println(simpleVo.toString());
//보내는 데이터
Map<String, Object> map = new HashMap<>();
SimpleVO vo = new SimpleVO("aaa123", "홍길동", "1");
map.put("total", 100);
map.put("data", vo);
return map;
}
@GetMapping("/getAjax2/{topic}")
@CrossOrigin("*") //전부 허용
public String getAjax2(@PathVariable("topic") String topic){
System.out.println(topic);
return "success";
}
- jquery09.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- jquery -->
<script src = "js/jquery-3.6.3.min.js"></script>
</head>
<body>
<button id="btn">에이젝트</button>
<script>
$("#btn").click(function() {
//ajax
$.ajax({
url: "http://localhost:8383/getAjax", //요청 주소
type: "post", //요청 타입
data: JSON.stringify({id: "aaa123", name: "minzzang"}), //보낼 데이터
contentType: "application/json", //보내는 데이터에 대한 타입(필수)
dataType: "json", //json, xml, html... 등등(받는 데이터 형식)
success: function(result) { //성공 시 콜백
console.log(result);
},
error : function(err) { //실패 시 콜백
console.log(err);
}
})
})
</script>
<hr/>
<input type="text" name="topic">
<button id="btn2">get 방식</button>
<script>
//버튼을 클릭하면 get 방식으로 ajax처리를 합니다.
//getAjax2/topic값을 실어주는 형태로 요청 처리 합니다.
//응답 데이터는 "success"
$("#btn2").click(function(){
var data = $("input[name='topic']").val();
$.ajax({
url: "http://localhost:8383/getAjax2/" + data,
type: "get", //전송 타입
success: function(result) { //성공 시 콜백
console.log(result);
},
error : function(err) { //실패 시 콜백
console.log(err);
}
})
})
</script>
</body>
</html>
- jquery user interface에서는 jquery가 제공하는 거 사용 가능함
* jquery10.html
- jquery10.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- jquery-ui.css -->
<link rel="stylesheet" href="//code.jquery.com/ui/1.13.2/themes/base/jquery-ui.css">
<!-- jquery-ui -->
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<!-- jquery-ui js -->
<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script>
</head>
<body>
<script>
$(function(){
$("#datepicker").datepicker({
showButtonPanel: true //옵션
});
$( "#datepicker" ).datepicker( "option", "dateFormat", "yy-mm-dd" );
})
</script>
<h3>제이쿼리 플러그인(데이트 피커)</h3>
<input type="text" id="datepicker">
</body>
</html>