객체가 안의 요소를 감추고  부드럽게 보여주고 하는 효과와


서서히 사라지거나 보여주는 효과 두 가지 slide, fade


slideDown()


slideUp()


slideToggle()


fadeIn()


fadeOut()


fadeToggle()



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style type="text/css">
	div {
		width: 300px;
		height: 30px;
		background: yellowgreen;
		color: orangered;
		border-radius: 10px;
		text-align: center;
		border: 1px solid green;
		cursor: pointer;
	}
	p {
		border: 1px solid lightgray;
		width: 300px;
		height: 20px;
		display: none;
	}
</style>
</head>
<body>
	<h1>slide 메소드</h1>
	<h3>slideDown()과 slideUp()</h3>
	
	<div>첫 번째 메뉴</div>
	<p class="contents">내용</p>
	<div>두 번째 메뉴</div>
	<p class="contents">내용</p>
	<div>세 번째 메뉴</div>
	<p class="contents">내용</p>
	<div>네 번째 메뉴</div>
	<p class="contents">내용</p>
	<div>다섯 번째 메뉴</div>
	<p class="contents">내용</p>
	
	<script type="text/javascript">
		$(function() {
			$(".contents").slideUp();
			
			$("div").click(function() {
				// $(this).next("p").slideDown();
				$(this).next("p").slideToggle(3000, function() {
					alert("토글 완료!");
				});
			});
		});
	</script>
</body>
</html>



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
	<h1>fade() 메소드</h1>
	<h3>fadeIn()와 fadeOut()</h3>
	<button id="fadein">fadeIn()</button>
	<button id="fadeout">fadeOut()</button>
	<br>
	<img id="flower" src="../image/flower1.PNG">
	
	<script type="text/javascript">
		$(function() {
			$("#fadein").click(function() {
				$("img").fadeIn(1000);
			});
			$("#fadeout").click(function() {
				$("img").fadeOut(1000);
			});
		});
	</script>
	
	<hr>
	
	<button id="toggle">fadeOut()</button>
	<br>
	<img id="forest" src="../image/forest1.PNG">
	<script type="text/javascript">
		$(function() {
			$("#toggle").click(function() {
				$("#forest").fadeToggle(2000, function() {
					alert("토글 완료");
				});
			});
		});
	</script>
</body>
</html>


css에서 다룰 수 있는 애니메이션 효과들을 jq에서 다뤄보자.


animate() : 지정한 스타일로 서서히 변함


show() : 보이기


hide() : 숨기기


toggle() : 보이거나 숨기기


animate

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script
  src="http://code.jquery.com/color/jquery.color-2.1.2.js"
  integrity="sha256-1Cn7TdfHiMcEbTuku97ZRSGt2b3SvZftEIn68UMgHC8="
  crossorigin="anonymous"></script>
<style type="text/css">
	.test1{
		width: 200px;
		height: 200px;
		background: orangered;
	}
</style>
</head>
<body>
	<h1>Effect메소드</h1>
	<p>페이지에 애니메이션 효과를 만들기 위한 메소드 집합</p>
	<h3>animate() 메소드</h3>
	<div id="test1" class="test1"></div>
	<button id="btn">animation 적용</button>
	
	<script type="text/javascript">
		$(function() {
			$("#btn").click(function() {
				// 적용될 애니메이션, 실행 시간, 끝나고 실행될 함수
				// 하지만 기본적으로 backgroundColor는 컨트롤 못하게 해놓았다.
				$("#test1").animate({width:"500px", backgroundColor:"blue"}, 3000, function() {
					alert("애니메이션 적용 완료")
				});
				// 배경 색을 바꾸려면 jquery 홈페이지에서 플러그인을 받아서 적용해야 한다.
			});
		});
	</script>

</body>
</html>


배경색의 경우는 jquery 파일을 하나 더 추가해야 한다.


jquery 홈페이지에서 plug in 메뉴를 누르고





리스트 중 animation의 페이지 두번째 (바뀔 수 있다) jquery color를 선택해서


Download 버튼을 누르면 다음과 같은 페이지가 뜬다.




버전에 맞는 링크를 누르면 script가 나오는데 복사해서 코드 상단에 붙여넣으면 된다.






<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style type="text/css">
	div{
		width: 50px;
		height: 50px;
		background: orangered;
		position: relative;
		
	}
</style>
<script type="text/javascript">
	// Position은 대개 relative나 absolute 두 개를 자주 사용하는데
	// relative는 자기 부모 객체를 기준으로 삼는 것이고
	// absolute는 현재 페이지 자체를 기준으로 위치를 설정하게 된다.
</script>
</head>
<body>
	<h1>상대적 애니메이션</h1>
	<div></div>
	<div></div>
	<div></div>
	<div></div>
	<div></div>
	<div></div>
	<div></div>
	<script type="text/javascript">
		$(function() {
			$("div").click(function() {
				var width = $(this).css("width");
				var height = $(this).css("height");
				
				$(this).animate({
					width:parseInt(width) + 50,
					height:parseInt(height) + 50
				}, "slow");
			});
			
			$("div").each(function(index) {
				$(this).delay(index * 50).animate({left:500}, "slow");
			});
		});
		
	</script>
</body>
</html>



show, hide, toggle

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
	<h1>시각적 효과</h1>
	<h3>show()와 hide()</h3>
	<p>문서 객체를 크게 하며 보여주거나 작게하며 사라지게 한다.</p>
	<button id="show">보여주기</button>
	<button id="hide">숨기기</button>
	<img id="river" src="../image/river1.PNG">
	<hr>
	
	<script type="text/javascript">
		$(function() {
			$("#show").click(function() {
				$("#river").show();
			});
			$("#hide").click(function() {
				$("#river").hide();
			});
		});
	</script>
	
	<br>
	
	<button id="toggle">토글하기</button>
	<br>
	<img id="forest" src="../image/forest1.PNG">
	
	<script type="text/javascript">
		$(function() {
			/* var ctn = 0;
			$("#toggle").click(function() {
				ctn++;
				if (ctn % 2 != 0) {
					$("#forest").hide();
				}else {
					$("#forest").show();
				}
			}); */
			// 따로 메소드가 또 있다.
			
			$("#toggle").click(function(){
				$("#forest").toggle(3000, function(){
					alert("토글완료");
				});
			});
		});
	</script>

	
	
</body>
</html>


JQuery문을 이용해서 이벤트를 활성화 하는 법을 알아보자.


bind() : 현재 문서에 존재하는 객체에 event 속성을 부여


unbind() : bind로 생성된 이벤트 제거


on() : 1.7 버전 이후로 쓰이고 bind와 기능은 같다. bind보단 on을 사용하길 권장한다.


off() : on으로 생성된 이벤트 제거





bind('이벤트명', function)으로 사용하고


on은 on('이벤트명':function, '이벤트명':function, '이벤트명':function, '이벤트명':function, .....) 과 같이 사용한다.



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
	#test2, #test3 {
		width:300px;
		height:300px;
		background:orangered;
	}
</style>
</head>
<body>
	<h1>이벤트</h1>
	<h3>이벤트 관련 속성</h3>
	<button onclick="test1(event)">실행 확인</button>
	
	<script type="text/javascript">
		function test1(event) {
			console.log(event);
		}
	</script>
	
	<hr>
	
	<h3>이벤트 연결 종류</h3>
	<h4>bind() : 현재 존재하는 문서 객체만 이벤트 연결<br>
	unbind() : bind()로 연결된 이벤트 제거</h4>
	<h1 id="test1">마우스를 올려보세요</h1>
	<script>
		$(function(){
			$("#test1").bind('mouseenter', function(){
				$(this).css({"background":"black", "color":"white"});
			}).bind('mouseleave', function(){
				$(this).css({"background":"white", "color":"black"});
			});
			
			$("#test1").bind('click', function(){
				$(this).unbind('mouseenter').unbind('mouseleave').css({"background":"white", "color":"black"});
			});
		});
	</script>
	
	<h4>on() : bind()대신에 on으로 대체됨<br>
	off() : on()으로 연결된 이벤트 제거</h4>
	<div id="test2">기본상태</div>
	<script>
		$(function(){
			$("#test2").on({'mouseenter':function(){
				$(this).css("background", "yellowgreen").text("마우스 올라감");
			}, 'mouseleave':function(){
				$(this).css("background", "yellow").text("마우스 내려감");
			}, 'click':function(){
				$(this).off('mouseenter').off('mouseleave').css("background", "orangered").text("기본값");
			}});
		});
	</script>
	
	<br>
	
	<div id="test3">기본상태</div>
	<script type="text/javascript">
		$(function() {
			$("#test3").on("click", {name : "김가루"}, function(event) {
				alert(event.data.name + "님 환영합니다!");
			});		
		});
	</script>
	
	<br>
	
	<div id="wrap">
		<h2>Header</h2>
	</div>
	<script>
		$(function(){
			$(document).on('click', 'h2', function(){
				var length = $("h2").length;
				var targetHTML = $(this).html();
				
				console.log(length);
				console.log(targetHTML);
				
				$("#wrap").append("<h2>" + targetHTML + " - " + length + "</h2>");
			});
		});
	</script>
	
	<hr>
	
	<h3>one() 메소드</h3>
	<p>이벤트를 한 번만 연결할 때 사용한다.</p>
	<h1 id="test4">클릭하세요</h1>
	<script type="text/javascript">
		$(function() {
			$("#test4").one("click", function() {
				alert("이벤트 발생!!");
			});
		});
	</script>
</body>
</html>









jq에서 이벤트를 지정하는 다른 방법은


$(불러올 객체).이벤트명(function)과 같이 쓴다.


이와 같이 다양한 이벤트 지정 방법이 존재하므로 마음에 드는 방법을 사용하면 된다.


mouseover, mouseenter, hover, keydown, keypress, keyup, click, change, focus 등 다양한 이벤트 키워드들이 있고


이 중 hover이나 focus 같이 사용법이 특이한 경우도 있으므로 예에서 잘 확인해보자



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style type="text/css">
	.inner{
		width: 100%;
		height: 100%;
		background: red;
	}
	.outer{
		width: 200px;
		height: 200px;
		background: orange;
		padding: 50px;
	}
	.reverse{
		background: black;
		color: white;
	}
</style>

</head>
<body>
	<h1>이벤트 연결 메소드</h1>
	<h3>mouseover와  mouseenter</h3>
	<div class="outer">
		<div class="inner"></div>
	</div>
	
	<script type="text/javascript">
		// mouseover는 요소에 마우스 포인터가 진입하면 발생
		// (직접 이벤트를 걸지 않은 자식요소에 포인터가 와도 발생함)
		// mouseenter는 오로지 자신에게 마우스 포인터가 와야만 발생함
		$(function() {
			$(".outer").mouseover(function() {
				console.log("OVER!");
			});
			$(".outer").mouseenter(function() {
				console.log("ENTER")
			});
		});
	</script>
	
	<h3>hover() 메소드</h3>
	<p>mouseenter와 mouseleave를 동시에 사용하는 효과이다.</p>
	<h1 id="test1">hover테스트</h1>
	<script type="text/javascript">
		$(function() {
			$("#test1").hover(
					function() { // 첫번째는 mouseenter
						$(this).addClass("reverse");
					},
					function() { // 두번째는 mouseleave
						$(this).removeClass("reverse");
					}
			);
		});
	</script>
	
	<h3>키보드이벤트</h3>
	<p>keydown : 키보드가 눌려질 때<br>
	keypress : 글자가 입력될 때<br>
	keyup : 키보드가 떼어질 때</p>
	<h4>동적으로 글자 수 세기</h4>
	<div>
		<h1 id="counter">150</h1>
		<textarea rows="5" cols="70"></textarea>
	</div>
	<script type="text/javascript">
		$(function() {
			$("textarea").keydown(function() {
				var inputLength = $(this).val().length;
				var remain = 150 - inputLength;
				
				$("#counter").html(remain);
				
				if (remain >= 0) {
					$("#counter").css("color", "black");
				}else {
					$("#counter").css("color", "red");
				}
			});
		});
	</script>
</body>
</html>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
	.trg {
		width:100px;
		height:100px;
		background:orangered;
		text-align:center;
		vertical-align:middle;
		cursor:pointer;
	}
	.increment {
		background:black;
		width:100px;
		height:25px;
		color:white;
		text-align:center;
		margin-top:20px;
		cursor:pointer;
	}
</style>
</head>
<body>
	<h1>입력 양식 이벤트</h1>
	<div id="wrap">
		<h1 align="center">회원 가입</h1>
		<form>
			<table align="center">
				<tr>
					<td><label>이름</label></td>
					<td><input type="text" name="name" id="name"></td>
					<td><label id="nameresult"></label></td>
				</tr>
				<tr>
					<td><label>아이디</label></td>
					<td><input type="text" name="userid" id="userid"></td>
					<td><input type="button" value="중복확인"></td>
				</tr>
				<tr>
					<td><label>비밀번호</label></td>
					<td><input type="password" name="pwd1" id="pwd1"></td>
					<td></td>
				</tr>
				<tr>
					<td><label>비밀번호 확인</label></td>
					<td><input type="password" name="pwd2" id="pwd2"></td>
					<td><label id="pwdresult"></label></td>
				</tr>
				<tr>
					<td><label>이메일</label></td>
					<td><input type="email" name="email" id="email"></td>
					<td></td>
				</tr>
				<tr>
					<td></td>
					<td><input type="submit"> &nbsp; <input type="reset"></td>
					<td></td>
				</tr>
			</table>
		</form>
	</div>
	
	<script type="text/javascript">
		$("#name").change(function(){
			var regExp = /[가-힣]/;
			
			if(!regExp.test($(this).val())){
				$("#nameresult").html("한글로 입력하세요").css("color", "red");
				$(this).focus().css("background","red");
			}else{
				$("#nameresult").html("정상입력").css("color","green");
			}
		
		});
			
		$("#pwd2").change(function(){
			if($("#pwd1").val() != $(this).val()){
				$("#pwdresult").html("비밀번호가 일치하지 않습니다").css("color","red");
				$("#pwd2").val('');
				$(this).select();
			}else{
				$("#pwdresult").html("비밀번호 일치").css("color","green");
			}
		});
		
		$("#name").focus(function(){
			console.log('focus이벤트 가동');
		}).focusin(function(){
			console.log('focusin이벤트 가동');
		}).focusout(function(){
			console.log('focusout이벤트 가동');
		}).blur(function(){
			console.log('blur이벤트 가동');
		}).change(function(){
			console.log('change이벤트 가동');
		}).select(function(){
			console.log('select이벤트 가동');
		})
		
		$("form").submit(function(event){
			alert("submit이벤트 동작");
			event.preventDefault();
		});

	</script>
	
	
	<div id="result"></div>
	<script>
		$(function(){
			$("input[type=submit]").click(function(){
				$("#result").html("이름 : " + $("#name").val());
			});
			
		});
	</script>
	
	<hr>
	
	<h3>trigger()메소드</h3>
	<div class="trg" id="trg">
		click Num : <span>0</span>;
	</div>
	<div class="increment" id="increment">click me!</div>

	<script type="text/javascript">
		var ctn = 0;
		
		$(function() {
			$("#trg").on("click", function() {
				ctn++;
				$("span").text(ctn);
			});
		});
		
		$("#increment").click(function() {
			$("#trg").trigger("click");
		});
	</script>
	
	
</body>
</html>


jq에서 자주 사용하는 메소드를 알아보자.




each() 반복문은 for in과 비슷하다. 반복문을 태그에 쓰는 것으로 여러 태그를 불러 왔을 때 


간편하게 일괄 처리 할 수 있다. 그리고 그의 순서와 값은 key 와 value인 index와 item을 사용한다.


index는 가져온 태그의 순서, item은 해당 값을 의미한다.


 


addClass(" ") : addClass는 말 그대로 속성값 class를 추가해준다.


removeClass(" ") : addClass는 말 그대로 속성값 class를 제거해준다.


toggleClass(" ") : toggleClass는 클릭 했을 때 클래스가 적용 or 해제되는 속성을 추가


is() : 해당 객체(요소)가 괄호에 입력한 객체인지 판별해주는 메소드 (true & false)


$.extend() : 객체에 속성을 추가하거나 객체와 객체를 합치는 메소드


$.noConflict() : js 라이브러리나 다른 버젼의 jquery의 $ 키워드 충돌을 방지하기 위해 사용하고


이 키워드를 사용하면 $ 달러 키워드를 다른것으로 바꿔 사용 할 수 있다.



어떻게 쓰이는지 확인해보자



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
	.high_light_0 {background:yellow;}
	.high_light_1 {background:orange;}
	.high_light_2 {background:blue;}
	.high_light_3 {background:green;}
	.high_light_4 {background:red;}
</style>
</head>
<body>
	<h1>메소드</h1>
	
	<h3>each() 메소드</h3>
	<p>배열을 관리하는 for in문과 비슷한 기능을 하는 메소드이다.</p>
	<p>$.each(object, function(index, item){})의 형식으로 사용한다.<br>
	index : 배열의 인덱스 또는 객체의 키를 의미한다.<br>
	item : 해당 인덱스나 키가 가진 값을 의미한다.</p>
	
	<script type="text/javascript">
		/*
		$(function() {
			var arr = [
				{name:"A", link:"http://www.naver.com"},
				{name:"B", link:"http://www.google.com"},
				{name:"C", link:"http://www.w3c.com"},
				{name:"D", link:"http://www.daum.net"}
			];
			
			$.each(arr, function(index, item) {
				var output = "";
				output += "<a href=" + item.link + ">";
				output += "<h2>" + item.name + "</h2>";
				output += "</a>";
				
				document.body.innerHTML += output;
			});
			
			
		})
		*/
	</script>
	
	<hr>
	
	<div id="wrap">
		<h1>item-0</h1>
		<h1>item-1</h1>
		<h1>item-2</h1>
		<h1>item-3</h1>
		<h1 id="item4">item-4</h1>
	</div>
	<script>
		$(function() {
			$("#wrap").children().each(function(index, item) {
				// 문서 객체에 class 속성을 추가하는 메소드
				$(this).addClass("high_light_" + index);
				
				if(index == 2){
					$(this).removeClass("high_light_" + index);
				}
			});
			
			$("#item4").click(function() {
				$(this).toggleClass("high_light_4");
			});
			
		})
	</script>
	
	<hr>
	
	<h3>문서 객체의 특징 판별 : is()</h3>
	<p>매개변수로 선택자를 입력하고, 선택한 객체가 선택자와 일치하는지 판단하여 boolean 리턴</p>
	<h3 class="test">test1</h3>
	<h3>test2</h3>
	<h3 class="test">test3</h3>
	<h3 class="test">test4</h3>
	<h3>test5</h3>
	<h3 class="test">test6</h3>
	
	<script>
		$(function(){
			$("h3").each(function(){
				if($(this).is(".test")){
					$(this).css({"background":"orangered", "color":"white"})
				}
			});
			
		});
	</script>
	
	<hr>
	
	<h3>$.extend() 메소드</h3>
	<p>객체에  속성을 추가하거나 여러개의 객체를 하나로 합칠 때 사용한다.</p>
	<script type="text/javascript">
		$(function() {
			var obj1 = {
					name:"김김김",
					age:20
			}
			var obj2 = {
					name:"님님님",
					hobby:["낚시", "영화"]
			}
			
			$.extend(obj1, {job:"강사"});
			
			console.log(obj1);
			console.log(obj2);
			
			
			// 두 객체를 하나로 합칠 때 사용 할 수 있다.
			// 중복되는 객체의 속성은 나중의 것으로 덮어 쓴다.
			var objs1 = $.extend(obj1, obj2);
			
			console.log(objs1);
		})
	</script>
	
	<hr>
	
	<h3>$.noConflict()</h3>
	<p>다른 라이브러리나 다른 버전의 jquery와 '$'의 충돌 방지를 위해 사용한다.</p>
	
	<h1 id="test">noConflict() 테스트</h1>
	
	<script type="text/javascript">
		/*
		var jq = $.noConflict(); // 이 키워드를 통해 $ 키워드 대신 jq를 사용 할 수 있게 된다. 
		
		jq(function() {
			jq("#test").css("color", "red");
		})
		*/
		// 위의 주석문을 해제하면 페이지의 모든 $가 jq로 바뀌므로 $로 호출한 함수들은 사용할 수 없다.
	</script>
	
	<!-- 다른 버전의 jquery와 충돌나는 경우 예시 -->
	<!-- <script src="jquery-1.11.1.js">
		var jb = jQuery.noConflict();
	</script>
	<script src="jquery-2.1.1.js">
		var hs = jQuery.noConflict();
	</script> -->
	
	
</body>
</html>



attr() : 해당 객체의 속성을 바꾸거나 확인 할 수 있는 메소드


css() : 해당 객체의 스타일을 바꾸거나 확인 할 수 있는 메소드



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style type="text/css">
	.first{color: red;}
	.second{color: pink;}
	.third{color: orange;}
</style>
</head>
<body>
	<h3>attr() 메소드</h3>
	<p>문서 객체의 특정 속성 값을 알아내거나 속성을 추가할 때 사용한다.</p>
	<img src="../image/flower1.PNG" width="400px" height="300px">
	
	<script>
		$(function(){
			// 속성 명에 해당하는 속성 값을 리턴
			var img = $("img").attr("src");
			console.log("사진경로 : " + img);
			
			// 속성명에 해당하는 속성 값을 변경
			$("img").attr("src", "../image/flower2.PNG");

			// 함수를 통해 인덱스와 value를 활용할 수 있음
			$("img").attr("src", function(index, value){
				console.log(index, value);
			});
			
			// 객체를 통해 여러 속성을 설정
			$("img").attr({"width":"100px", "height":"50px"});
			
			// 객체의 속성을 제거
			$("img").removeAttr("width").removeAttr("height");
			
		});
	</script>
	
	<hr>
	
	<h3>css() 메소드</h3>
	<p>문서 객체의 스타일을 검사하거나 변경할 때 사용한다.</p>
	<h1 class="first">test-0</h1>
	<h1 class="second">test-1</h1>
	<h1 class="third">test-2</h1>
	
	<script type="text/javascript">
		$(function() {
			// 속성 명에 해당하는 속성 값을 리턴
			console.log($(".first").css("color"));
			
			// 속성명에 해당하는 속성 값을 변경
			$(".first").css("color", "black");
			
			// 함수를 통해 인덱스와 value를 활용할  수 있음
			$(".first").css("color", function(index, value) {
				console.log(index, value);
			});
			
			//객체를 통해 여러 속성을 지정
			$(".first").css({"font-size":"3em", "background":"orange"});
		
		})
	</script>
</body>
</html>




순회(탐색) 메소드 - Ancestors


선택한 요소의 상위 요소를 찾는 메소드이다.


parent() : 해당 요소의 바로 상위 요소


parents() : 해당 요소의 상위 요소들 전부


parentsUntil() : 해당 요소의 상위 요소부터 괄호 안에 입력된 요소까지




<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<title>Insert title here</title>
<style>
	.wrap * {
		border:1px solid lightgray;
		display:block;
		padding:5px;
		margin:15px;
		color:gray;
	}
</style>
</head>
<body>
	<h1>순회(탐색) 메소드</h1>
	<h3>Ancestors 메소드</h3>
	<p>선택된 요소의 상위 요소들을 선택할 수 있는 메소드</p>
	
	<div class="wrap">
		<div style="width:500px;">div (grand-grandParent)
			<ul>ul (grandParent)
				<li>li (directParent)
					<span>span</span>
				</li>
			</ul>
		</div>
		<div style="width:500px;">div (grandParent)
			<p>p (directParent)
				<span>span</span>
			</p>
		</div>
	</div>
	
	<script>
		$(function(){
			//선택된 요소의 바로 상위 요소만 리턴
			$("span").parent().css({"color":"red", "border":"2px solid red"});
			
			//선택된 요소의 모든 상위 요소 리턴(매개변수가 있으면 매개변수와 일치하는 부모만 리턴)
			$("span").parents("ul").css({"color":"blue", "border":"2px solid blue"});
			
			$("span").parentsUntil("div").css({"color":"yellowgreen", "border":"2px solid yellow"});
		});
	</script>
</body>
</html>





순회(탐색) 메소드 - Descendants


선택한 요소의 하위 요소를 찾는 메소드이다.


children() : 바로 다음의 하위 객체


find() : 하위에서 괄호안의 객체를 찾는다




<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<title>Insert title here</title>
<style>
	.wrap * {
		border:1px solid lightgray;
		display:block;
		padding:5px;
		margin:15px;
		color:gray;
	}
</style>
</head>
<body>
	<h1>순회(탐색) 메소드</h1>
	<h3>descendants 메소드</h3>
	<p>선택된 요소의 하위 요소를 선택할 수 있는 메소드</p>
	
	<div class="wrap">
		<div style="width:500px;">div (grand-grandParent)
			<ul>ul (grandParent)
				<li>li (directParent)
					<span>span</span>
				</li>
			</ul>
		</div>
		<div style="width:500px;">div (grandParent)
			<p>p (directParent)
				<span>span</span>
			</p>
		</div>
	</div>
	<script>
		$(function(){
			// 선택된 요소의 모든 자손(바로 다음 레벨) 객체를 리턴하고
			//매개변수가 있는 경우 일치하는 자손 객체를 리턴한다.
			//$(".wrap").children().css({"color":"red", "border":"2px solid red"});
			
			// 자식의 자식, 손자
			//$(".wrap").children().children().css({"color":"red", "border":"2px solid red"});
			
			// 손자 중 ul 태그만
			$(".wrap").children().children("ul").css({"color":"red", "border":"2px solid red"});
		
			$(".wrap").find("span").css({"color":"yellowgreen", "border":"2px solid yellowgreen"});
		});
	</script>
</body>
</html>







순회(탐색) 메소드 - sideway


siblings() : 선택 요소와 같은 레벨에 있는 요소를 리턴, 인자가 있다면 일치하는 요소만 리턴


next() : 선택 요소의 다음 요소를 리턴


nextAll() : 선택 요소의 다음 요소들을 전부 리턴


nextUntil() : 선택 요소 다음부터 괄호에 인자로 받은 태그명 까지 리턴


prev() : 선택 요소의 전 요소를 리턴


prevAll() : 선택 요소의 전 요소들을 전부 리턴


prevUntil() : 선택 요소 전부터 괄호에 인자로 받은 태그명 까지 리턴




<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style type="text/css">
	.wrap, .wrap * {
		display:block;
		border:1px solid lightgray;
		color:lightgray;
		padding:5px;
		margin:15px;
	}
</style>
</head>
<body>
	<h1>순회(탐색) 메소드</h1>
	<h3>sideway 메소드</h3>
	<div class="wrap">div (parent)
		<p>p</p>
		<span>span</span>
		<h2>h2</h2>
		<h3>h3</h3>
		<p>p</p>
	</div>
	<script type="text/javascript">
		$(function() {
			// 선택된 요소와 같은 레벨에 있는 요소 리턴
			// 인자가 있는 경우 인자와 일치하는 요소 리턴
			$("h2").siblings().css({"color":"red", "border":"2px solid red"});
			$("h2").siblings("p").css({"color":"orange", "border":"2px solid orange"});
			
			// 선택된 요소의 값은 레벨의 형제들 중 선택된 요소의 다음 한 개의 요소를 리턴한다.
			$("h2").next().css({"color":"blue", "border":"2px solid blue"});
			
			// 선택된 요소의 같은 레벨 형제 중 선택된 요소 다음 모든 요소를 리턴한다.
			$("h2").nextAll().css({"font-size" : "2em"});
			
			// 선택된 요소부터 같은 레벨의 인자 범위까지의 모든 요소를 리턴
			$("h2").nextUntil("p").css("border", "dashed");
			
			// 선택된 요소부터 같은 레벨의 형제 중 요소 이전의 한 개 요소를 리턴한다.
			$("h2").prev().css("background", "yellow");
			
			// 선택된 요소부터 같은 레벨의 형제 요소 중 이전의 모든 요소를 리턴한다.
			$("h2").prevAll().css({"background":"cyan", "color":"red"});
			
			// 선택된 요소의 같은 레벨의 형제 요소들 중
			// 인자로 전달된 요소 이전의 요소를 리턴
			$("h2").prevUntil("p").css("border", "dotted");
		})
	</script>
</body>
</html>






테이블에서 전에 썻던 even odd first last 와 같은 방법으로는 한계가 있다.


고로 아래의 방법을 확인해보자.


eq() : 괄호 안의 번호에 해당하는 순서 태그를 지칭


nth-child() : 괄호 안의 식에 해당하는 순서 태그들을 지칭


gt() : 괄호 안의 번호에 초과하는 태그들을 지칭


lt() : 괄호 안의 번호에 미만인 태그들을 지칭


contains() : 특정 문자열을 포함


has() : 특정 태그를 가지고 있는


not() : 해당 선택자와 일치하지 않는 객체



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
	<h1>함수 형태의 필터 선택자</h1>
	<h3>:nth-child() 필터선택자</h3>
	
	<table border="1">
		<tr>
			<th>이름</th>
			<th>혈액형</th>
			<th>지역</th>
		</tr>
		<tr>
			<td>김김김</td>
			<td>C형</td>
			<td><a>달</a></td>
		</tr>
		<tr>
			<td>님님님</td>
			<td>D형</td>
			<td>태양</td>
		</tr>
		<tr>
			<td>딤딤딤</td>
			<td>E형</td>
			<td>은하계</td>
		</tr>
		<tr>
			<td>림림림</td>
			<td>C형</td>
			<td>지구</td>
		</tr>
		<tr>
			<td>밈밈밈</td>
			<td>D형</td>
			<td>소행성</td>
		</tr>
		<tr>
			<td>빔빔빔</td>
			<td>C형</td>
			<td>집</td>
		</tr>
		<tr>
			<td colspan="2">총원</td>
			<td>6</td>
		</tr>
	</table>
	
	<script type="text/javascript">
		$(function() {
			// n번째에 위치하는 객체 선택
			$("tr:eq(0)").css({"background":"black", "color":"white"});
			
			// 수열번 째 위치하는 태그 선택(순서로 적용)
			$("tr:nth-child(2n)").css("background","yellowgreen");
			$("tr:nth-child(3n)").css("background", "orange");
			
			// n번째를 초과하는 객체 선택(인덱스 적용)
			$("tr:gt(6)").css("background", "lightgray");
			
			// n번째 미만에 위치하는 객체 선택
			$("tr:lt(7)").css("font-size", "1.5em");
			// em은 부모 객체의 font size를 의미
			
			// 특정 문자열을 포함하는 객체  선택
			$("tr:contains('A형')").css("color", "red");
			
			// 특정 태그를 가지고 있는 객체 선택
			$("td:has(a)").css("color", "white");
			
			// 선택자와 일치하지 않는 객체 선택
			$("td:not(:contains('김김김'))").css("color", "lightgray");
			
			
		});
	</script>
</body>
</html>



앞의 선택자가 태그 이름과 선택자의 조합이었다면


필터링은 메소드 형태로 조건을 괄호로 받는다.


.filter(:odd) 와 같이..



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
	<h1>필터링 메소드</h1>
	<h3>filtering 메소드의 사용법</h3>
	<p>필터 선택자를 메소드 형태로 제공한다.</p>
	
	<h4 class="test">test-1</h4>
	<h4 class="test">test-2</h4>
	<h4 class="test">test-3</h4>
	<h4 class="test">test-4</h4>
	<h4>test-5</h4>
	<h4 class="test">test-6</h4>
	
	<script type="text/javascript">
		$(function() {
			$("h4:even").css("background", "black").css("color", "white");
			
			// filter() 메소드 사용
			$("h4").filter(":even").css("background", "orangered").css("color", "white");
			
			// 함수를 매개변수로 하는 filter() 메소드 사용
			$("h4").filter(function(index) {
				return index % 2 == 1;
			}).css("background", "yellowgreen").css("color", "black");
			
			// 선택된 요소 중 제일 처음에 있는 요소 리턴
			$("h4").first().css("font-size", "1.5em");
			
			// 선택된 요소 중 제일 마지막에 있는 요소 리턴
			$("h4").last().text("마지막 요소");
			
			// 인덱스 번호와 일치하는 요소만 리턴
			$("h4").eq(3).text("eq()로 선택됨");
			
			// 인자값과 일치하지 않는 요소만 리턴
			$("h4").not(".test").css({"background":"yellow", "color":"black"});
		});
	</script>
</body>
</html>



input 태그의 타입 별  선택 방법


$("input:타입").~~~과 같이 쓴다.


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<title>Insert title here</title>
</head>
<body>
	<h1>입력 양식 필터 선택자</h1>
	<p>input 태그의 type속성에 따라 문서 객체 선택 가능</p>
	<label>텍스트 상자 : </label><input type="text"><br>
	<label>버튼 : </label><input type="button"><br>
	<label>체크박스 : </label><input type="checkbox"><br>
	<label>파일 : </label><input type="file"><br>
	<label>이미지 : </label><input type="image" src="../image/flower1.PNG"><br>
	<label>패스워드 : </label><input type="password"><br>
	<label>라디오버튼 : </label><input type="radio"><br>
	<label>리셋버튼 : </label><input type="reset"><br>
	<label>submit 버튼 : </label><input type="submit"><br>
	<script type="text/javascript">
		$(function name() {
			$("input:text").css("background", "red");
			
			$("input:button").attr("value", "왕버튼").css({"width":"200px", "height":"100px"});
			
			$("input:checkbox").attr("checked", true).css({"width":"50px", "height":"50px"});
			
			$("input:file").css("background", "yellowgreen");
			
			$("input:image").mouseenter(function() {
				$(this).attr("src", "../image/river1.PNG");
				// $(this)는 자신을 의미
			})
			
			$("input:image").mouseout(function() {
				$(this).attr("src", "../image/flower1.PNG");
			})
			
			
			$("input:radio").attr("checked", true);
			
			$("input:reset").css({"background":"blue", "color":"white"});
			
			$("input:submit").css({"background":"purple", "color":"white"});
		});
	</script>

	
</body>
</html>




input 태그에 쓰인 value의 값을 반환받는 방법은


JQuery로 원하는 태그를 불러오고 .val() 키워드를 사용


체크박스의 체크 여부 확인의 경우는 .prop("checked"); 이다.



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<title>Insert title here</title>
</head>
<body>
	<h1>입력 양식 필터 선택자</h1>
	<h3>checkbox의 상태에 대한 선택자</h3>
	
	<input type="checkbox" name="hobby" value="game" id="game">
	<label for="game">게임</label>
	<input type="checkbox" name="hobby" value="movie" id="movie">
	<label for="movie">영화</label>
	<input type="checkbox" name="hobby" value="music" id="music">
	<label for="music">음악</label>
	
	<script type="text/javascript">
		// form 태그에서 submit으로 전송하면 ?hobby=game&hobby=movie 형태로 넘어간다.
		// 이 값은 배열 형태로 저장되게 된다.
		$("input:checkbox").change(checkedChange);
		
		function checkedChange() {
			// console.log($(this).prop("checked"));
			
			if($(this).prop("checked")){
				$(this).css({"width":"50px", "height":"50px"});
			}else{
				$(this).css({"width":"15px", "height":"15px"});
			}
		}
	</script>
	
	<hr>
	
	<h3>select > option 태그의 상태에 대한 선택자</h3>
	<select name="national" id="national">
		<option value="한국" selected>한국</option>
		<option value="미국">미국</option>
		<option value="일본">일본</option>
		<option value="중국">중국</option>
	</select>
	
	<label>선택한 나라 : </label><input type="text" id="result">
	
	<script type="text/javascript">
		$(selectChange);
		
		$("#national").change(selectChange);
	
		function selectChange() {
			var value = $("option:selected").val();
			
			$("#result").val(value);
		}
	</script>
	
	<hr>
	
	<h3>input 상태에 대한 선택자</h3>
	<label>활성화 텍스트상자 : </label><input type="text"><br>
	<label>비 활성화 텍스트 상자 : </label><input type="text" disabled><br>
	<label>활성화 버튼 : </label><input type="button" value="활성화"><br>
	<label>비 활성화 버튼 : </label><input type="button" value="비활성화" disabled><br>
	
	<script type="text/javascript">
		$(function() {
			$("input:enabled").css("background", "yellowgreen");
			$("input:disabled").css("background", "red");
		})	
	</script>
	
	<hr>
	
	<h3>필터 선택자</h3>
	
	<table border="1">
		<tr>
			<th>이름</th>
			<th>혈액형</th>
			<th>지역</th>
		</tr>
		<tr>
			<td>김김김</td>
			<td>C형</td>
			<td>달</td>
		</tr>
		<tr>
			<td>님님님</td>
			<td>D형</td>
			<td>태양</td>
		</tr>
		<tr>
			<td>딤딤딤</td>
			<td>E형</td>
			<td>은하계</td>
		</tr>
		<tr>
			<td>림림림</td>
			<td>C형</td>
			<td>지구</td>
		</tr>
		<tr>
			<td>밈밈밈</td>
			<td>D형</td>
			<td>소행성</td>
		</tr>
		<tr>
			<td>빔빔빔</td>
			<td>C형</td>
			<td>집</td>
		</tr>
		<tr>
			<td colspan="2">총원</td>
			<td>6</td>
		</tr>
	</table>
	
	<script type="text/javascript">
		$(function() {
			// odd : 홀수, 0번째 인덱스 부터 계산
			$("tr:odd").css("background", "orange");
			// even : 짝수, 0번째 인덱스 포함
			$("tr:even").css("background", "lightgray");
			// first : 첫번째
			$("tr:first").css("background", "black").css("color", "white");
			// last : 마지막
			$("tr:last").css("background", "orangered").css("color", "white");
		});
	</script>
</body>
</html>






선택자는 HTML의 요소, 문서 객체들을 지목하는 키워드이다.


제목에 기입한 만큼 다양한 선택자가 있다.


그 중 자식과 후손은 의미를 알아야 한다.


자식은 바로 하위 요소를 말하고 후손은 하위 요소(들)을 말한다.


그리고 요소에 부여한 속성값을 이용해서 선택하는 방법은 다양한데 다음과 같다.




요소[속성] : 특정 속성을 가지고 있는 객체 선택


요소[속성=값] : 속성 안의 값이 특정 값과 같은 객체 선택


요소[속성~=값] : 속성 안의 값이 특정 값을 단어로써 포함하는 객체 선택


요소[속성^=값] : 속성 안의 값이 특정 값으로 시작하는 객체 선택


요소[속성$=값] : 속성 안의 값이 특정 값으로 끝나는 객체 선택


요소[속성*=값] : 속성 안의 값이 특정 값을 포함하는 객체 선택




예를 통해 확인해보자.



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<title>Insert title here</title>
</head>
<body>
	<h1>기본선택자</h1>
	<h3>전체선택자 : *</h3>
	<p>HTML 페이지에 있는 모든 문서객체를 선택하는 선택자이다.</p>
	
	<script type="text/javascript">
		/*
		$(function name() {
			$("*").css("color", "red");
		});
		*/
	</script>
	
	<hr>
	
	<h3>태그선택자</h3>
	<h4>안녕? 난 뽀로로야!</h4>
	<p>노는게 제일좋아 친구들 모여라 언제나 즐거워 개구쟁이 뽀로로</p>
	<h4>안녕? 난 뽀로로야!</h4>
	<p>노는게 제일좋아 친구들 모여라 언제나 즐거워 개구쟁이 뽀로로</p>
	
	<script type="text/javascript">
		$(function name() {
			$("h4").css("color", "orangered");
			
			$("h4, p").css("background", "yellowgreen");
		});
	</script>
		
	<hr>
	
	<h3>아이디 선택자</h3>
	<p>특정한 아이디 속성을 가지고 있는 문서 객체를 선택하는 선택자이다.</p>
	<h1>테스트1</h1>
	<h1 id="test2">테스트2</h1>
	<h1>테스트3</h1>
	<script type="text/javascript">
		$(function() {
			$("#test2").css("color", "yellowgreen");
		});
	</script>
	
	<hr>
	
	<h3>클래스 선택자</h3>
	<p>특정한 클래스 속성을 가진 문서 객체를 선택하는 선택자이다.</p>
	<h1 class="item">테스트1</h1>
	<h1 class="item select">테스트2</h1>
	<h1 class="item">테스트3</h1>
	
	<script type="text/javascript">
		$(function() {
			$(".item").css("color", "orange");
			
			// 두 개 클래스 속성을 모두 갖는 문서 객체를 선택하고 싶을 때
			$(".item.select").css("background", "red");
		});
	</script>
	
	<hr>
	
	<h3>자식 선택자와 후손 선택자</h3>
	<p>기본 선택자의 앞에 붙여 사용하며 기본 선택자의 범위 제한</p>
	<div>
		<ul>
			<li><h3>apple</h3></li>
			<li>banana</li>
			<li>orange</li>
			<li>fineapple</li>
			<li>peach</li>
		</ul>
		<h3>child h3</h3>
	</div>
	
	<script type="text/javascript">
		$(function() {
			// 자식 선택자(한개만 지목), >
			$("div>h3").css("color", "red");
			
			// 후손 선택자(아래 전부), 띄어쓰기
			$("div h3").css("background", "orange");
		})
	</script>
	
	<hr>
	
	<h3>속성 선택자</h3>
	<p>기본선택자 뒤에 붙여 사용한다.</p>
	<p>
	요소[속성] : 특정 속성을 가지고 있는 객체 선택<br>
	요소[속성=값] : 속성 안의 값이 특정 값과 같은 객체 선택<br>
	요소[속성~=값] : 속성 안의 값이 특정 값을 단어로써 포함하는 객체 선택<br>
	요소[속성^=값] : 속성 안의 값이 특정 값으로 시작하는 객체 선택<br>
	요소[속성$=값] : 속성 안의 값이 특정 값으로 끝나는 객체 선택<br>
	요소[속성*=값] : 속성 안의 값이 특정 값을 포함하는 객체 선택
	</p>
	
	<input type="text"><br>
	<input type="password" class="test test1"><br>
	<input type="radio"><br>
	<input type="checkbox" class="test2"><br>
	<input type="file"><br>
	
	<script type="text/javascript">
		$(function() {
			$("input[type=text]").val("change value");
			$("input[class~=test]").val("123456");
			$("input[type^=ra]").attr("checked", true);
			$("input[type$=box]").attr("checked", true);
			$("input[class*=st2]").css("width", "100px").css("height", "100px");
			// 바로 위의 연달아 변경하는 함수를 체이닝 방식이라고 한다.
		})
	</script>
	
	
</body>
</html>


J Query란,



존 레식에 의해 개발된 경량 javaScript 라이브러리로 

복잡한 javaScript코드를 손쉽게 구현하기 위해 개발되었다.



jquery의 장점

1. DOM과 관련된 처리를 쉽게 할 수 있다.

2. ajax통신, 이벤트처리 등을 폭넓게 지원한다.

3. 별도의 플러그인을 통해 차트, 슬라이드쇼, 테이블 등을 간단히 구현할 수 있다.







jQuery를 Eclipse에 적용하는 방법은 두 가지가 있다.


1. js 파일을 직접 다운로드 하여 사용


2. 코드를 작성하여 인터넷을 통해서 받아오는 방법


먼저 첫번째


http://jquery.com/ <---- 웹사이트로 들어가면 아래와 같은 화면이 나오는데 Download를 눌러준다.






누르고 페이지 내용 중 다음 스크린샷과 비슷한 내용 중 박스를 우클릭 - 링크 저장을 하자


그냥 클릭하면 js 파일 내용이 쭉 나오기만 한다.




받은 파일을 Eclipse에 넣으면(드래그 앤 드롭) 끝..!





이 아니고 다음 결과를 보자.





그대로 jQuery를 사용하면 콘솔창에 다음과 같은 오류가 난다.


Uncaught ReferenceError: $ is not defined, $ 키워드가 정의되어 있지 않다.


즉,  js 파일을 불러오지 않았기 때문에 일어나는 오류이다.




다음과 같이 script에 js 경로를 알맞게 소스를 추가하면 된다.








2번째 방법으로는 CDN(Content Delivery Network) 방법, 인터넷을 통해 js 파일을 불러오는 방법이다.


아까 위에서 jquery 다운로드 사이트에서 스크롤을 내리면 Other CDNs 항목이 있다.


보통 구글에서 땡겨오니 Google CDN을 눌러보자




많은 버젼의 스크립트들이 있는데


그 중 3.x snippet이라는 부분에 스크립트 코드가 있는데


이 부분을 복사하여 아까처럼 head 부분에 붙여넣기 하면 된다.










만약 처음 프로젝트 생성 시 3번째에 root를 설정하는데


이 root는 실행 시 주소 줄에 쓰이고 index 창을 찾아가는 기본 경로가 된다.


만약 이 경로가 마음에 안든다면 다음과 같이 변경해보자.


좌측의 해당 프로젝트를 우클릭 - Properties 를 누르면 다음과 같은 창이 나온다.




해당 항목이 root 경로를 의미하는데 마음에 드는 경로로 바꾸고




서버를 더블 클릭하여 모듈로 보아 Path 또한 바꿔주면 끝난다.


되도록이면 바꾸지 말자.






+ Recent posts