javascript

제이쿼리(J-Query)

전주천둥새 2023. 5. 15. 16:04

1. jQuery(제이쿼리)

*** 제이쿼리 다운로드 ***

제이쿼리홈페이지 > 다운로드 선택 >

다운로드 페이지에서 해당다운로드 클릭 후 전환된 화면에서 ctrl + s 눌러서 다운로드

(경로는 작업할 폴더에 위치하고, 사용할 때는 웹콘텐츠 폴더 하위에 저장하여 사용한다.)

1) 제이쿼리

- 호환성, 애니메이션 효과가 쉽게 구현될 수 있도록 만들어진 라이브러리

- css 선택자를 활용하여 객체 선택을 쉽게 할 수 있도록 만들어져 있다.

- 외부 라이브러리 이므로 다운 받아 사용해야 한다.

2) 다운로드 방식

- 네트워크 경로 활용 : 네트워크의 절대경로를 활용 (CDN)

- 파일을 다운로드 하여 내 프로젝트에 삽입 : 상대경로 활용

>>> 웹콘텐츠 폴더 하위에 추가 폴더를 생성하여 다운로드한 제이쿼리 파일 삽입

<!-- 상대경로를 활용하여 제이쿼리 사용 -->
	<script type="text/javascript" src="resources/js/jquery-3.6.0.min.js"></script>
	
	<script type="text/javascript">
		/* 
			식별자 명으로 사용할 수 있는 특수 기호 -> $, _
		*/
		console.log(jQuery, '제이쿼리');
		console.log($, '제이쿼리$');
		
		//제이쿼리 함수 실행시 css 선택자를 인수로 삽입하여 실행 할 수 있다.
		console.log(jQuery('body'), '제이쿼리 함수 실행 후');
		console.log($('body'), '제이쿼리 $ 함수 실행 후');
		
		//제이쿼리 함수 실행 후 제이쿼리 객체가 반환이 되어야 제이쿼리 메서드 활용이 가능하다.
		//제이쿼리 함수 실행 후 제이쿼리 객체가 반환되어 click 메서드 활용
		//마지막에 호출된 메서드가 제이쿼리 객체라면 체이닝 기법으로 도트연산자 활용 가능
		$('body').click(function(){
	    }).click(function(){
	    });
	    console.log($('body').click(function(){
	    }), '클릭 메서드 호출 후');
	</script>

3) 제이쿼리 선택자

- 제이쿼리 함수에 인수로 css 선택자를 삽입하여 객체를 선택이 가능하다.

- 인수에 해당되는 element 객체를 찾아 제이쿼리 객체에 담아 반환을 해준다.

- 제이쿼리의 메서드를 통하여 element 객체 검색도 가능하다.

1. 직접선택자

- 제이쿼리 함수

- css 선택자 : 아이디, 클래스, 속성, 속성과 값, and, or, 상하관계

- 동일한 선택자를 활용하여 직접 선택자로 여러번 객체를 조회할 시 배열 객체가 조회한 만큼 생성이된다

-> 성능저하로 이어짐

<div id="myDiv">div</div>
	
	<button type="button" class="myBtn">myBtn</button>
	<button type="button" class="myBtn">myBtn</button>
	<button type="button" class="myBtn">myBtn</button>
	
	<script type="text/javascript">
		//대상 1개
		$('#myDiv').click(function(){
			console.log('myDiv');
		});
		//제이쿼리 직접 선택자로 객체를 검색하여 배열에 element 객체를 담아서 반환
		//이벤트 등록시 배열에 담긴 모든 element 객체에 이벤트를 등록 해준다.
		var $myBtn = $('.myBtn');
		$myBtn.click(function(){
			console.log('myBtn');
		});
		
		//on - 이벤트 등록, off - 이벤트 해제 $('.myBtn').off('click');
		//.off(인수가 없으면 전체 이벤트 해제, 있으면 해당 이벤트만 해제)
		$myBtn.off();
		$myBtn.on('click', function(){
			console.log('myBtn 2');
		});
	</script>

2. 인접 관계 선택자

- 조회된 객체에서 상위 혹은 하위 요소 검색에 활용되는 메서드

(1)상위 : 객체.parent(), 객체.parents('선택자');

- 객체.parent() : 조회된 객체 1단계 위 상위 요소

- 객체.parents() : 모든 상위 요소를 배열(제이쿼리 객체)에 담아 반환

- 객체.parents('선택자') : 모든 상위 요소 중 인수에 해당되는 상위 요소를 찾아 객체반환

(2)하위 : 객체.children(), 객체.children('선택자');

- 객체.children() : 조회된 객체 1단계 아래의 하위 요소를 배열(제이쿼리 객체)에 담아 반환

- 객체.children('선택자') : 조회된 객체 1단계 아래의 하위 요소중 일치하는 대상을 배열에 담아 반환

- 하위요소 전체 중 검색 : 객체.find('선택자') -> 하위 요소 중 인수와 일치하는 대상을 찾아 배열에 담아 반환

(3) parent, parents

- 상위요소 1단계 검색, 상위요소 전체 혹은 전체 중 검색

<ul>
		<li>
			<button type="button" class="liBtn">liBtn</button>
		</li>
		<li>
			<button type="button" class="liBtn">liBtn</button>
		</li>
		<li>
			<button type="button" class="liBtn">liBtn</button>
		</li>
	</ul>
	
	<script type="text/javascript">
		$('.liBtn').click(function(){
			console.log(this, 'element 객체');
			//제이쿼리 메서드를 활용하기 위해서는 element객체를 제이쿼리 객체에 담아야한다.
			//직접 선택자 -> css 선택자, element, html 문자열
			console.log($(this).parent(), 'parent');
			console.log($(this).parents(), 'parents');
			console.log($(this).parents('li'), 'parents li');
		});
	</script>

(4) children, find

- 하위 요소 1단계 전체 검색, 모든 하위 요소 중 인수에 해당되는 대상 검색

<ul>
		<li class="my-li">
			<span class="a">안녕</span>
			<span class="a">하세요.</span>
			<span>
				<button type="button" class="ch-btn">하위 요소 버튼</button>
			</span>
		</li>
		<li class="my-li">
			<span class="a">안녕</span>
			<span class="a">하세요.</span>
			<span>
				<button type="button" class="ch-btn">하위 요소 버튼</button>
			</span>
		</li>
	</ul>
	
	<script type="text/javascript">
		$('.my-li').click(function(){
			//1단계 아래의 요소를 배열에 담아 반환
			console.log($(this).children(), 'children');
			//1단계 아래의 요소 중 인수에 해당되는 대상을 찾아 배열에 담아 반환
			console.log($(this).children('.a'), 'children.a');
			//하위 요소중 인수에 해당되는 대상만 찾아 배열에 담아 반환
			console.log($(this).find('.ch-btn'), 'find.ch-btn');
		});
	</script>

2. 제이쿼리 이벤트 메서드

- 이벤트명으로 메서드가 존재

- on메서드로 이벤트를 등록가능

- off메서드로 이벤트 헤제가 가능

- trigger 메서드를 통하여 이미 등록된 이벤트를 작동 시킬 수 있다.

1. 이벤트 메서드

- 일반 이벤트 : click(), change(), keyup(), keydown(), keypress(), blur(), hover()

- 마우스 이벤트 : mousemove(), mouseup(), mousedown()

2. on, off

- 객체.on('이벤트명', function( ){ });

- 객체.off() -> 모든 이벤트 해제

- 객체.off('이벤트') -> 인수에 해당되는 이벤트 해제

3. trigger

- 등록된 이벤트 강제 실행(사용자의 행위 없어도 행위를 한 것처럼 실행 가능)

- 객체.trigger('이벤트명');

- 객체.이벤트메서드() -> 인수에 함수가 없이 실행

<select id="mySelect">
		<option value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
	</select>
	<button type="button" id="myBtn">트리거 작동</button>
	
	<script type="text/javascript">
		$(function(){
			$('#mySelect').change(function(){
				console.log(this.value, 'element value 속성에 접근');
				/* 
					속성 조작 메서드
					객체.val() -> 선택된 대상의 value 속성의 값을 가지고 온다.
					객체.val('값') -> 선택된 대상의 value 속성에 값을 대입한다.
				*/
				console.log($(this).val(), '제이쿼리 메서드를 통하여 value 속성에 접근');
			});
			
			$('#myBtn').click(function(){
				//$('#mySelect').change(); //change 이벤트 강제 실행 -> 트리거
				$('#mySelect').trigger('change');
			});
		});
	</script>

4 요소조작 메서드

- 선택된 대상의 하위 요소를 가지고 오거나 하위 요소 전체를 변경한다.

- innerText, innerHTML -> text(), html()의 형태로 사용

1) text()

- 객체.text() -> 선택된 대상의 텍스트 요소 전체 가지고 오기

- 객체.text('텍스트 요소') -> 선택된 대상의 하위 요소를 전체 인수의 값 텍스트 요소로 변경

2) html()

- 객체.html() -> 선택된 대상의 하위 요소를 문자열로 전체 가지고 오기

- 객체.html('문자열 html') -> 선택된 대상 하위에 인수에 해당되는 html 문자열을

html로변환하여(parsing) 전체 변경

<div id="myDiv">클릭해주세요</div>
	
	<script type="text/javascript">
		$(function(){
			$('#myDiv').click(function(){
				console.log($(this).html(), '선택된 대상의 하위요소 html을 문자열로 가지고오기');
				$(this).html('<h1>안녕하세요.</h1>');
			});
		});
	</script>

5 속성 조작 메서드

- 선택된 대상의 속성을 조작한다.

1) attr(), removeAttr()

- 선택된 대상의 속성을 추가, 제거, 변경, 접근

- 객체.attr('속성명', '속성값') -> 선택된 대상의 속성을 추가(변경)

- 객체.attr('속성명') -> 선택된 대상의 인수에 해당되는 속성 값 가지고 오기

- 객체.removeAttr('속성명') -> 선택된 대상의 인수에 해당되는 속성 제거

<div id="myAttr">속성제어</div>
	<button type="button" id="myBtn01">속성변경 클릭</button>
	<button type="button" id="myBtn02">속성변경 제거</button>
	
	<script type="text/javascript">
		$(function(){
			var cnt=0, 
			$myAttr = $('#myAttr');
			$('#myBtn01').click(function(){
				$myAttr.attr('data-cnt', cnt);
				console.log($myAttr.attr('data-cnt'), '속성값 가지고 오기');
				cnt++;
			});
			$('#myBtn02').click(function(){
				$myAttr.removeAttr('data-cnt');
				console.log($myAttr.attr('data-cnt'), '제거후 속성값 가지고 오기');
			})
		});
	</script>

2) val()

- 선택된 대상의 value 속성의 값을 가지고 오거나 변경한다. (form 요소)

- 객체.val() -> 선택된 대상의 value 속성값 가지고 오기

- 객체.val('값') -> 선택된 대상의 value 속성에 인수에 해당되는 값 대입하기

3) - 가상선택자(:checked, :selected)를 제어한다<br>

- 객체.prop('가상선택자') -> 선택된 대상이 인수에 해당되는 가상선택자에 적응이 되었다면 true, 아니라면 false

- 객체.prop('가상선택자', true or false) -> 선택된 대상이 인수에 해당되는 가상선택자에 적응 변경

<input type="checkBox" class="myCheck">
	<input type="checkBox" class="myCheck">
	<input type="checkBox" class="myCheck">
	<button type="button" id="myBtn03">전체 체크</button>
	<button type="button" id="myBtn04">전체 체크 해제</button>
	<script type="text/javascript">
		$(function(){
			var $myCheck = $('.myCheck');
			$('#myBtn03').click(function(){
				$myCheck.prop('checked', true);
			});
			$('#myBtn04').click(function(){
				$myCheck.prop('checked', false);
			});
		});
	</script>

6 css()

- 선택된 대상의 css(style)을 변경하는 메서드

- 객체.style.css속성 = 값 -> 객체.css('css속성', '값');

- 객체.style.css속성 -> 객체.css('css속성'); -> css 적용된 값 가지고 오기

- 객체.css({'css 속성명1' : '값1'}, {'css 속성명2' : '값2'}, {'css 속성명3' : '값3'}) -> css 한번에 적용하기

<button type="button" id="bodyColorChange">배경 색상 변경</button>
	<button type="button" id="bodyAllChange">배경 css 한번에 변경</button>
	
	<script type="text/javascript">
		var $body = $('body');
		$('#bodyColorChange').click(function(){
			$body.css('background-color', '#f00');
		});
		$('#bodyAllChange').click(function(){
			$body.css({
				'background-color' : '#00f',
				'color' : '#fff'
			});
		});
	</script>

7. addClass(), removeClass(), hasClass(), toggleClass()

- 객체.addClass('클래스') -> 선택된 대상의 인수에 해당되는 클래스 삽입

/ 객체.classList.add()와 같다

- 객체.removeClass('클래스') -> 선택된 대상의 인수에 해당되는 클래스 제거

/ 객체.classList.remove()와 같다

- 객체.hasClass('클래스') -> 선택된 대상의 인수에 해당되는 클래스가 있는지 확인

/ 객체.classList.contains()와 같다

- 객체.toggleClass('클래스') -> 선택된 대상의 인수에 해당되는 클래스가 있는지 확인하여 존재하면 삭제하고,

존재하지 않다면 생성한다.

/ 객체.classList.toggle()와 같다

<button type="button" id="classToggle">배경 색상 전환</button>
	<button type="button" id="classAdd">배경 색상 전환2</button>
	<style>
		.red-back{background-color: red;}
	</style>
	
	<script type="text/javascript">
		$(function(){
			var $body = $('body');
			$('#classToggle').click(function(){
				$body.toggleClass('red-back');
			});
			$('#classAdd').click(function(){
				if($body.hasClass('red-back')){ //contains
					$body.removeClass('red-back'); //remove
				}else{
					$body.addClass('red-back'); //add
				}
			});
		});
	</script>

>>> 어떤 버튼을 클릭해도 토글이 실행된다.