1. ajax

- 비동기화 통신을 할 수 있는 웹 어플리케이션 기법

- XMLHttpRequest 객체 활용

- ajax에서 요청할 컨텐츠 타입을 주로 -> json, xml, text

*** 동기화와 비동기화 ***

동기화

- 요청과 응답이 동시에 이루어짐

- 클라이언트가 서버에 요청시 서버에서 응답

- 작성된 코드 순서대로 처리를 완료하고 이후에 클라이언트에 응답을하는방식

> 서버에서 응답이 늦어질 경우 클라이언트에서 화면출력을 대기하는 시간이 길어진다.

비동기화

- 요청과 응답이 동시에 이루어지지 않는다

- 웹페이지를 리로드하지 않고 서버와 통신하는 방식

- 클라이언트 먼저 실행이되고 서버에서 응답이 왔을 경우 작성된 코드가 실행이 된다.

**********************

*** contnetType (MIME-TYPE) ***

html -> text/html

xml -> application/xml

json -> application/json

text -> text/plain

**********************

1) json

- application/json 콘텐츠 타입

- 구문 {"key" : "value"}

- 구문 [{"key" : "value"}, {"key" : "value"}]

2) jQuery $.ajax

- XMLHttpRequest 가공하여 만들어진 메서드

- 응답페이지의 요청 방식을 설정

▼ html 템플릿

<button type="button" id="ajaxCall">요청</button>
	
	<script type="text/javascript">
		$(function(){
			$('#ajaxCall').click(function(){
				
				//1. $.ajax() 메서드 실행시 객체를 삽입하여 실행 가능
				//2. 객체에는 요청 주소, 요청 방식, 데이터, 응답방식
				var request = $.ajax({
					url: "jsonContentType.jsp", //요청주소
					method: "POST", //요청방식
					data: { myName : '홍길동' }, //요청하는 페이지에 전달할 데이터
					dataType: "json" //응답방식(html, xml, json, text, function)
				});
				 
				request.done(function( data ) { //응답 정상 완료시 실행되는 메서드
					//응답 완료시 등답페이지의 텍스트를 읽어 콜백데이터로 전달
					//응답방식에 맞춰서 파싱하여 전달
					console.log(data);
				});
				 
				request.fail(function( jqXHR, textStatus ) { //응답 실패시 실행
					//파싱에러 -> 포멧방식이 잘못 전달
					//에러 -> 서버에서 대부분 에러
					alert( "Request failed: " + textStatus );
				});
			})
		})
	</script>

▼ jsp 템플릿

<%@ page language="java" contentType="application/json; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String myName = request.getParameter("myName");
%>  
  
{"key" : "value", "key1" : 0, "key2" : true, "myName" : "<%=myName%>"}

>>> 상단의 html 템플릿은 jQuery 홈페이지에서 복사하면된다.(ajax검색 -> 하단의 항목선택 후 소스코드 복사)

 

2. spring - ajax 비동기 통신

 

0. 파일생성

1. application.properties 수정

server.port=80
//정적리소스 맵핑
spring.web.resources.static-locations=classpath:/static/
//로거레벨설정
logging.level.root=INFO
logging.level.org.springframework.web=OFF

2. controller 생성(동작확인)

@Controller
public class MainController {
	
	@GetMapping("/")
	public String main() {
		
		return "index";
	}

3. 경로생성

4. dto생성 (작성 후 getter/setter와 toString 작업)

package kr.or.ksmart.dto;

public class User {
	private String userName;
	private String userAddr;
	private int userAge;
	
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserAddr() {
		return userAddr;
	}
	public void setUserAddr(String userAddr) {
		this.userAddr = userAddr;
	}
	public int getUserAge() {
		return userAge;
	}
	public void setUserAge(int userAge) {
		this.userAge = userAge;
	}
	@Override
	public String toString() {
		return "User [userName=" + userName + ", userAddr=" + userAddr + ", userAge=" + userAge + "]";
	}
	
	
}

5. service생성(/**후 자동완성기능을 사용하여 @param, @return등 설정)

package kr.or.ksmart.service;

import org.springframework.stereotype.Service;

import kr.or.ksmart.dto.User;

@Service
public class UserService {
	
	/**
	 * 회원 1명의 정보를 가지고 오기
	 * @param - 없음
	 * @return User
	 */
	public User getUser() {
		//db에서 회원 1명의 정보를 가지고 왔다는 가정
		User user = new User();
		user.setUserName("홍길동");
		user.setUserAddr("전주시");
		user.setUserAge(20);
		return user;
	}
	
}

6. 경로 수정

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AJAX</title>
<script type="text/javascript" src="/js/jquery-3.6.0.min.js"></script>
</head>
<body>
	<button type="button" id="getUser">회원정보</button>
	
	<script type="text/javascript">
		$('#getUser').click(function(){
			var request = $.ajax({
			  url: "/user/getUser",
			  method: "POST",
			  dataType: "json"
			});
			request.done(function( data ) {
			  console.log(data);
			});
			request.fail(function( jqXHR, textStatus ) {
			  alert( "Request failed: " + textStatus );
			});
		});
	</script>
</body>
</html>

>>확인

 

3. map data 전달

> js부분

var request =
			$.ajax({
				url: "/payList/modifyList",
				type: "POST",
				data : {
						"modifyCode" : modifyCode,
						"modifyName" : modifyName,
						"modifyAmount" : modifyAmount,
						"modifyContents" : modifyContents,
				},
				success: function(data){
					alert('성공~');
				}
			});
			request.fail(function( jqXHR, textStatus ) {
				alert( "Request failed: " + textStatus );
			});

> controller부분

// 급여내역 수정 ajax
	@RequestMapping(value = "/modifyList", method = { RequestMethod.POST })
	@ResponseBody 
	public String modifyFixedList(@RequestParam Map<String, Object> param) {
		String modifyCode = (String) param.get("modifyCode");
		String modifyName = (String) param.get("modifyName");
		String modifyAmount = (String) param.get("modifyAmount");
		String modifyContents = (String) param.get("modifyContents");
		System.out.println(modifyCode + " <- modifyCode!!");
		System.out.println(modifyName + " <- modifyName!!");
		System.out.println(modifyAmount + " <- modifyAmount!!");
		System.out.println(modifyContents + " <- modifyContents!!");
		
		/*
		 * log.info("수정화면에서 입력받은 data:{}", fixedAllowanceList);
		 * payListService.modifyFixedList(fixedAllowanceList);
		 */
		
		
		return modifyCode;
	}

'javascript' 카테고리의 다른 글

제이쿼리(J-Query)  (0) 2023.05.15
이벤트 등록, 동적 바인딩  (0) 2023.05.15
Document API - 객체 검색  (0) 2023.05.15
html 요소 이벤트, on-- 속성, form 객체  (0) 2023.05.15
브라우저 객체 모델(window)  (0) 2023.05.15

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>

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

'javascript' 카테고리의 다른 글

Ajax(비동기 통신)  (0) 2023.05.15
이벤트 등록, 동적 바인딩  (0) 2023.05.15
Document API - 객체 검색  (0) 2023.05.15
html 요소 이벤트, on-- 속성, form 객체  (0) 2023.05.15
브라우저 객체 모델(window)  (0) 2023.05.15

1. addEventListener

- 이벤트 등록시 사용되는 메서드

1) on접두사와 addEventListener 차이

- on접두사 속성 : 해당 이벤트에 관련해서 1개의 함수만 등록이 가능

- addEventListener : 동일한 이벤트 다수 등록 가능

1. on 접두사 사용

<button type="button" id="btn">on접두사로 이벤트 등록</button>
	<script type="text/javascript">
		var btn = document.querySelector('#btn');
		console.log({btn});
		
		btn.onclick = function(){
			alert(1);
		}
		//onclick 속성에 다른 함수가 있을 경우 기존 함수에서 새로운 함수로 교체된다.
		btn.onclick = function(){
			alert(2);
		}
	</script>

>>> 처음 설정해두었던 함수값을 재설정하게되어 재설정된 값만 출력된다.

2. addEventListener 사용

- 1개의 객체에 동일한 이벤트 다수 등록이 가능하다.

- addEventListener('이벤트명', 함수) -> 이벤트명은 on접두사 없이 작성

<button type="button" id="btn2">addEventListener 이벤트 등록</button>
	<script type="text/javascript">
		var btn2 = document.querySelector('#btn2');
		
		//동일한 이벤트를 중복 등록 시킬 수 있다.
		btn2.addEventListener('click', function(){
			alert(1);
		});
		btn2.addEventListener('click', function(){
			alert(2);
		});
	
	</script>

>>> 중복사용이 가능하기 때문에 처음 설정된 값이 출력된 후 다시 설정한 값또한 출력이 된다.

2. 동적바인딩(콜백데이터 활용)

- 동적으로 생성되는 객체에 이벤트 바인딩 하기

- classList -> 선택된 대상의 클래스의 목록을 확인할 수 있다.

- classList의 하위 메서드들이 존재한다. add, remove, contains

- add('추가될 클래스명') -> 선택된 대상의 클래스 속성에 클래스 추가

- remove('제거할 클래스') -> 선택된 대상의 클래스 속성 중 인수에 해당되는 값 제거

- contains('찾는 클래스') -> 인수와 일치하는 클래스가 있을 경우 true, 아니라면 false

- toggle('클래스명') -> 인수에 해당되는 클래스가 없다면 추가, 있다면 제거

1) classList

- element 객체에 classList 속성에 접근하여 class관련 객체에 접근할 수 있다.

<button type="button" id="btn" class="my-remove">클래스 확인</button>
	<script type="text/javascript">
		var btn = document.querySelector('#btn');
		btn.addEventListener('click', function(){
			//클래스를 다루는 객체에 접근하기
			console.log(this.classList);
			
			//add 메서드 활용
			this.classList.add('my-class');
			this.classList.add('my-add');
			
			//remove 메서드 활용
			this.classList.remove('my-remove');
			
			//contains 메서드 활용
			console.log(this.classList.contains('my-add'));
			console.log(this.classList.contains('my-remove'));
			
			//toggle 메서드 활용
			this.classList.toggle('my-toggle');
		});
	</script>

>>> 클래스확인 버튼 클릭시 my-toggle이 존재하지않으면 생성, 존재하면 삭제되는 걸 확인할 수 있다.

또한 contains 태그를 활용하여 해당 클래스의 존재유무를 true 또는 false로 확인할 수 있다.

'javascript' 카테고리의 다른 글

Ajax(비동기 통신)  (0) 2023.05.15
제이쿼리(J-Query)  (0) 2023.05.15
Document API - 객체 검색  (0) 2023.05.15
html 요소 이벤트, on-- 속성, form 객체  (0) 2023.05.15
브라우저 객체 모델(window)  (0) 2023.05.15

1. document API

- html 문서를 객체화 시켜놓은 것

1) 객체 검색

- 이벤트를 핸들링 하기 위해서 이벤트 대상을 먼저 검색을 할 수 있어야 한다.

- 객체 검색은 id, class, tag, css 선택자 (태그들이 가질 수 있는 속성)로 검색할 수 있다.

1. id로 객체 검색

- 태그가 id속성이 있을 경우 해당 id 속성 값으로 객체를 검색 할 수 있다.

- document.getElementById('아이디 값') 의 형태로 사용한다.

<button type="button" id="myBtn">id로 객체 검색</button>
	<script type="text/javascript">
		//상단에 해당 객체가 먼저 로딩이 되어야만 아래 자바스크립트에서 해당 객체를 찾을 수 있다.
		var myBtn = document.getElementById('myBtn');
		console.log(myBtn, {myBtn});
		
		myBtn.onclick = function(){
			alert('myBtn');
			//해당 객체의 style 속성에 접근하여 css 속성에 접근해서 값 대입
			myBtn.style.color = '#f00';
			myBtn.innerText = 'myBtn';
		}
	</script>

*** innerText, innerHTML ***

  1. innerText : 선택된 객체의 텍스트 요소를 가지고 오거나, 텍스트 요소를 대입할 수 있다.

2. innerHTML : 선택된 객체의 html 요소를 텍스트로 가지고 오거나, html 요소를 삽입할 수 있다.

<button type="button" id="innerBtn01">텍스트 요소 삽입</button><br>
	<button type="button" id="innerBtn02">html 요소 삽입</button>
	<div id="innerTarget">버튼을 클릭해주세요!</div>
	
	<script type="text/javascript">
		var innerBtn01 = document.getElementById('innerBtn01');
		var innerBtn02 = document.getElementById('innerBtn02');
		var innerTarget = document.getElementById('innerTarget');
		
		innerBtn01.onclick = function(){
			console.log('innerBtn01');
			innerTarget.innerText = '<img src ="https://search.pstatic.net/common/?src=http%3A%2F%2Fblogfiles.naver.net%2FMjAyMTEwMjZfNjcg%2FMDAxNjM1MjIwMTI1MjY4.ZmhBbiTAr_SygThAyJH81q9me63F3t-US0_N1HU2GaIg.YNPR3yBCnMdXEcHYrvM8t94C-gQR_kJovJn2CKXomnwg.JPEG.morethan7691%2F%25C5%25E8%25C7%25CF%25B5%25F0_2.jpg&type=a340">';
		}
		innerBtn02.onclick = function(){
			console.log('innerBtn02');
			//텍스트를 HTML(파싱)로 변환하여 삽입
			innerTarget.innerHTML = '<img src ="https://search.pstatic.net/common/?src=http%3A%2F%2Fblogfiles.naver.net%2FMjAyMTEwMjZfNjcg%2FMDAxNjM1MjIwMTI1MjY4.ZmhBbiTAr_SygThAyJH81q9me63F3t-US0_N1HU2GaIg.YNPR3yBCnMdXEcHYrvM8t94C-gQR_kJovJn2CKXomnwg.JPEG.morethan7691%2F%25C5%25E8%25C7%25CF%25B5%25F0_2.jpg&type=a340">';
		}
	</script>

2. class로 객체 검색

- 태그에 class 속성이 있을 경우 해당 속성의 값과 일치하는 모든 대상 검색 -> 배열

- document.getElementsByClassName('클래스명') 의 형태로 사용

<input type="checkbox" class="myCheck" value="1">
	<input type="checkbox" class="myCheck" value="2">
	<input type="checkbox" class="myCheck" value="3">
	
	<script type="text/javascript">
		var myCheck = document.getElementsByClassName('myCheck');
		console.log('myCheck');
		
		for(var i=0; i<myCheck.length; i++){
			console.log(myCheck[i].checked);
		}	
	</script>

3. 콜백데이터

- element 객체로 접근하여 이벤트 등록 후 이벤트 작동 후에는 이벤트 작동에 대한데이터가 콜백 데이터로

넘어온다.

<button type="button" id="myBtn">클릭</button>
	<script type="text/javascript">
		var myBtn = document.querySelector('#myBtn');
		myBtn.onclick =function(){
			console.log(event);
		}
</script>

>> 이벤트에 대한 속성내용이 콘솔창에 출력

<div id="myDiv" style="height: 300px; background-color: #000; position: relative;" >
		<span id="myText" style="color: #fff; position: absolute;">ksmart</span>
	</div>
	<script type="text/javascript">
		var myDiv = document.querySelector('#myDiv');
		var myText = document.querySelector('#myText');
		myDiv.onmousemove = function(e){
			console.log(e.x, e.y);
			myText.style.top = (e.y-203) + 'px';
			myText.style.left = e.x + 'px';
		}
	</script>

>>> 마우스의 위치를 따라서 해당 텍스트가 이동, 마우스의 위치가 변함에따라 위치 값 출력 (x, y)

<input type="text" id="myInput">
	<script type="text/javascript">
		var myInput = document.querySelector('#myInput');
		myInput.onkeyup = function(e){
			//keyCode 13 -> 엔터
			console.log(e);
			if(e.keyCode ==13){
				location.href = 'https://naver.com';
				//폼이라면 submit() 메서드 사용
			}
		}
	</script>

>>> keyCode 속성을 확인하여 엔터키의 속성값(13)을 활용하여 input칸에서 엔터클릭시 네이버로 경로이동

4. 동적 html 생성과 이벤트 바인딩

- 이벤트 등록은 화면 로딩시에 등록이 된다.

- 화면 로딩 이후에 생성된 html은 이벤트가 등록이 되어 있지 않다.

(1) innerHTML으로 동적 생성

<button type="button" id="addLi">li 생성</button>
	<ul id="ul01">
		<li>
			<button type="button" class="del">제거</button>
		</li>
		<li>
			<button type="button" class="del">제거</button>
		</li>
	</ul>
	<script type="text/javascript">
		var addLi = document.querySelector('#addLi');
		var ul01 = document.querySelector('#ul01');		
		function delEvent(){			
			var del = document.querySelectorAll('.del');
			for(var i=0; i < del.length; i++){
				del[i].onclick = function(){
					this.parentElement.remove();
				}
			}
		}
		delEvent();		
		
		addLi.onclick = function(){
			var html = '';
			for(var i=0; i < 10; i++){
				html += '<li><button type="button" class="del">제거</button></li>';
			}
			ul01.innerHTML = html;
			delEvent();
		}
	</script>

>>> li생성 버튼 클릭시 i의 반복값 만큼 li 생성, 제거 버튼 클릭시 해당 li 제거

(2) API로 동적 생성

- createElement(); -> node(element) 생성 : 화면에는 추가는 안됨

- appendChild(); -> element를 documenet tree 추가 혹은 이동 (element만 인수로 삽입가능)

- setAttribute('속성명', '속성값'); -> 선택된 대상에 속성 추가

- getAttribute('속성명'); -> 선택된 대상에 속성 값 가지고 오기

<button type="button" id="addTag">추가</button>
	<ul id="addTarget">	
	</ul>	
	<script type="text/javascript">
		var addTag = document.querySelector('#addTag');
		var addTarget = document.querySelector('#addTarget');
		
		addTag.onclick = function(){
			var cli = document.createElement('li');
			var cbtn = document.createElement('button');
			
			//버튼에 텍스트 요소 추가
			cbtn.innerText = '삭제';
			//버튼에 속성 추가
			cbtn.setAttribute('type', 'button');
			//버튼에 이벤트 등록
			cbtn.onclick = function(){
				this.parentElement.remove();
			}
			
			//생성된 li에 생성된 버튼을 추가
			cli.appendChild(cbtn);			
			console.log(cli, cbtn, {cbtn});
			
			//생성된 li를 #addTarget에 추가
			addTarget.appendChild(cli);			
			
		}
		
	</script>

>>> 추가버튼 누를시 한개씩 생성, 삭제버튼 클릭시 해당 li 삭제

5. elment 복제

- cloneNode(); - > 선택된 대상 복제 -> 인수가 true 일 경우 하위 까지 복제

- 이벤트를 제외한 html 요소만 복제 한다. (눈에 보이는 화면에 정보만)

<ul>
		<li>
			<button type="button" class="addBtn">추가</button>
			<button type="button" class="delBtn">삭제</button>
		</li>
	</ul>
	
	<script type="text/javascript">
		var addBtn = document.querySelectorAll('.addBtn');
		var delBtn = document.querySelectorAll('.delBtn');
		function btnAdd(){
			//클릭한 대상의 상위까지 올라가서 복제
			var c = this.parentElement.cloneNode(true);
			console.log(c, '복제');
			this.parentElement.parentElement.appendChild(c);
			
			var ab = c.querySelector('.addBtn');
			var db = c.querySelector('.delBtn');
			ab.onclick = btnAdd;
			db.onclick = btnDelete;
		}
		function btnDelete(){
			this.parentElement.remove();
		}
		for(var i=0; i < addBtn.length; i++){
			addBtn[i].onclick = btnAdd;
		}
		for(var i=0; i < delBtn.length; i++){
			delBtn[i].onclick = btnDelete;
		}
	</script>

>>> 추가 버튼 클릭시 해당 li와 동일한 객체를 생성, 삭제시 해당 li 삭제. 복제된 li에서도 똑같은 기능 구현

'javascript' 카테고리의 다른 글

제이쿼리(J-Query)  (0) 2023.05.15
이벤트 등록, 동적 바인딩  (0) 2023.05.15
html 요소 이벤트, on-- 속성, form 객체  (0) 2023.05.15
브라우저 객체 모델(window)  (0) 2023.05.15
쿠키(cookie)  (0) 2023.05.15

1. 이벤트

- 사용자에 의하여 주로 발생이(사용자의 행위) 된다.

- 마우스, 키보드, 버튼, 양식전송(form), 페이지로드(html 문서 읽기 완료), 포커스(커서) 등등

다양한 변화 혹은 전달 등 어떠한 행위가 실행되는것

- 위의 변화에 따른 발생 혹은 시점이 일어 났을 경우 추가적인 코드 실행

- 자바스크립트의 이벤트는 콜백함수, 크로져로 주로 사용된다.

1) 자바스크립트의 이벤트 등록 종류

1. document API를 활용하여 이벤트 등록

- CSS 선택자를 활용하여 문서 요소 선택

- 이벤트 종류(사용자 행위)를 선택하여 이벤트를 등록하여 사용

- document, elements 에 대한 이해가 필요

2. html 요소를 활용하여 이벤트 등록(on 접두사 속성)

- 모든 태그에는 on 접두사를 가진 속성이 존재한다.

- on 접두사를 가진 속성들은 사용자의 행위에 관련된 명칭으로 이루어져 있다.

- on 속성의 값에는 자바스크립트 코드가 들어간다.

- on 속성의 행위가 사용자에 이루어 졌을 시 등록된 자바스크립트 코드가 실행된다.

- 주로 함수와 연계되어 사용한다.

- 함수와 연계시 이벤트가 발동되어 해당 함수가 실행되었을때 인수에 this를 삽입할 수 있다.

여기서 this는 이벤트 발동 대상을 이야기한다. (이벤트 동작 태그)

2. 자주 사용되는 on 접두사 속성 종류

- 사용자의 행위에 대해서 크게 클릭, 선택, 키입력이 있다.

- onclick : 사용자가 클릭 했을 경우

- onchange : 사용자가 선택하여 값을 바꾸었을 경우

- onkeyup : 키보드를 눌렀다가 뗐을때

- onkeydown : 키보드를 누를때

- onkeypress : 키보드를 누르고 있을때

- onblur : 키보드 커서가 빠져 나갔을때

- onfocus : 키보드 커서가 활성화 되었을때

>>> this키워드를 사용하는 이유는 obj의 값을 본인으로 설정하기 위함.

■ onclick

<button type="button" onclick="alert('안녕하세요.')">버튼 클릭1</button>
	<button type="button" onclick="myClick1('홍길동')">버튼 클릭2</button>
	<!-- this -> 버튼 자신 -->
	<button type="button" onclick="myClick2(this)" value="btn3">버튼 클릭3</button>
	<script type="text/javascript">
		function myClick1(userName){
			alert(userName + ' 안녕하세요.2');
		}
		function myClick2(obj){
			console.log({obj});
			console.log(obj.innerText);
			obj.innerText = '내 버튼 3번째';
			
			console.log(obj.value);
			obj.value = '내 버튼값은 내맘대로';
			//웹 표준에 해당되는 태그들의 각 속성들은 자바스크립트로 요소에 접근했다면
			//해당대상객체.속성 바로 접근이 가능하다.
			
		}
	</script>

▼ 버튼클릭 1 버튼 클릭시

▼ 버튼클릭 2 버튼 클릭시

▼ 버튼클릭 3 버튼 클릭시

>>> obj 배열을 출력, obj의 내부 텍스트 출력(버튼클릭 3), obj 내부 텍스트 값 변경,

obj 값 출력(btn3), obj 값 변경

■ onchange

- select는 선택된 값을 바로 value 속성으로 접근하여 값을 가지고 올 수 있다.

(하위 요소인 option 태그객체까지 접근하여 select 된 대상의 value 값을 가지고 올 필요까진 없다.)

<select onchange="myChange(this)">
		<option value=""> :: 선택 :: </option>
		<option value="1">1</option>
		<option value="2">2</option>
	</select>
	<script type="text/javascript">
		function myChange(obj){
			console.log({obj});
			console.log(obj.value);
			
			//option에 있는 값을 대입시 일치하는 option 태그는 강제 selected
			obj.value = '2';
		}
	</script>
	
	<input type="radio" name="myRadio" value="1" onchange="myRadio(this)">
	<input type="radio" name="myRadio" value="2" onchange="myRadio(this)">
	<input type="radio" name="myRadio" value="3" onchange="myRadio(this)">
	
	<script type="text/javascript">
		function myRadio(obj){
			console.log({obj});
			console.log(obj.value);
		}
	</script>

>>> 값이 변경될 경우 함수 실행 > select 값 선택시 해당 select 메서드를 콘솔창에 출력,

선택된 obj 값 출력 후 obj값을 2로 설정(강제 selected), radio 선택란 선택시 해당 input 메서드 출력, 선택된 obj 값 출력

■ keyup, kewdown, keypress

<input type="text" onkeyup="myKey(this, 'up')" onblur="myKey(this, 'blur')">
	<input type="text" onkeydown="myKey(this, 'down')">
	<input type="text" onkeypress="myKey(this, 'press')">
	
	<script type="text/javascript">
		function myKey(obj, str){
			console.log({obj}, str)
			console.log(obj.value, str)
		}
	</script>

>>> onkeyup : 키보드를 눌럿다 땟을 때 함수 실행

>>> onblur : 키보드커서가 빠져나갔을 때 함수실행

>>> onkeydown : 키보드를 눌럿을때 바로 함수 실행

>>> onkeydown : 키보드를 눌럿을때 바로 함수 실행(keydown과 동일)

■ focus

<input type="text" onfocus="myFocus(this)">
	<script type="text/javascript">
		function myFocus(obj){
			console.log({obj});
			obj.value = 0;
		}
	</script>

>>> 키보드 커서가 활성화 될 시 함수 실행

3. form 객체

- form 태그에 name 속성값이 지정이 되어 있다면, window 객체에 form 객체를 등록해준다.

- form 하위의 요소(단 하위 요소들도 name 속성에 값이 지정이 되어 있어야함)들은 계층적 구조로 form 하위

객체에 포함 시켜준다. (form명.하위요소name)

- form 하위 요소들이 기본적으로 가지고 있는 메서드들이 있다. -> focus(); -> 강제 커서 활성화

- form 객체는 submit() 메서드를 가지고 있다.

- form 하위 요소들 중 동일한 name을 가진 대상들은 배열 객체로 저장이 된다.

<form action="js03.html" method="get" name="myForm">
		<input type="text" name="myName" value="홍길동">
		<input type="text" name="myAddr">
		<input type="text" name="myAge" value="20">
		
		<input type="radio" name="myGender" value="남">남
		<input type="radio" name="myGender" value="여">여
	</form>
	
	<button type="button" onclick="myFormFn()">전송</button>
	
	<script type="text/javascript">
		function myFormFn(){
			console.log(myForm);
			console.log(myForm.myName);
			console.log(myForm.myName.value);
			console.log(myForm.myGender);
			myForm.myName.value = '이순신';
			myForm.myAge.value = 40;
			
			if(myForm.myAddr.value == ''){
				alert('주소를 입력해주세요.');
				myForm.myAddr.focus();
				return;
			}
			
			//radio, checkbox 태그는 체크가 되었는지 확인할 수 있는 속성 checked가 있다.
			//체크가 되어 있다면 checked 속성의 값이 true, 아니라면 false가 반환이 된다.
			var cnt = 0;
			for(var i=0; i < myForm.myGender.length; i++){
				if(myForm.myGender[i].checked){
					cnt++;
				}
			}
			if(cnt == 0){
				alert('성별을 체크해주세요.');
				return;
			}
			
			myForm.submit();
		}
	</script>

>>> form 객체를 활용한 유효성 검사(일반 텍스트 부분은 공백을 사용하여 유효성 검사, radio나 checkBox 등

체크가 되는 부분은 checked 속성을 활용하여 유효성 검사 진행)

▼ 주소를 입력하지 않고 전송버튼 클릭시 뜨는 경고창 확인

▼ 경고창 확인후 콘솔에 출력된 값과 변경된 값 확인

▼ 성별 미체크시 출력되는 경고창 확인

'javascript' 카테고리의 다른 글

이벤트 등록, 동적 바인딩  (0) 2023.05.15
Document API - 객체 검색  (0) 2023.05.15
브라우저 객체 모델(window)  (0) 2023.05.15
쿠키(cookie)  (0) 2023.05.15
내장객체  (0) 2023.05.15
<script type="text/javascript">
		console.log(history);
</script>​
<a href="myLocation.jsp?myName=ksmart">myLocation.jsp이동</a><br>
	<button type="button" onclick="move()">myLocation.jsp이동</button>
	<script type="text/javascript">
		function move(){
			location.href = 'myLocation.jsp?myName=ksmart';
		}
	</script>

1. 브라우저 객체 모델

1) window

- window 키워드는 생략이 가능하다.

▼ script 코드 부분

<script type="text/javascript">
		console.log(window, this);	
	</script>

▼ 결과 확인

1. open, close

- open : 새창 열기

- close : 창 닫기

▼ script 코드 부분

<!-- on 접두사를 가진 속성들은 자바스크립트 코드삽입이 되며, 사용자가 해당 행위 했을때 스크립트가 작동 -->
	<button type="button" onclick="myPageOpen()"> 새창 열기 </button>
	
	<script type="text/javascript">
		/*
			open('주소', '창 이름', '옵션(새창의 사이즈 및 탭과 스크롤 노출 여부 설정)')
			3번째 인수에 대한 옵션
			width -> 창 가로 사이즈
			hegiht -> 창 세로 크기
			left -> 새창 띄울 절대값 가로 위치
			top -> 새창 띄울 절대값 세로 위치
			scrollbars -> 스크롤 노출 여부
			
		*/			
		function myPageOpen(){
			//- 절대 경로, 상대 경로
			/* open(
					'https://naver.com', 
					'naver', 
					'width=300, height=400, left=200, top=200, scrollbars=no'
			); */
			//팝업 닫기에서 저장된 myPopupClose의 값이 Y가 아니라면 
			if(getCookie('myPopupClose') != 'Y'){				
				open(
						'mypopup.html', 
						'내 팝업', 
						'width=300, height=400, left=200, top=200, scrollbars=no'
				);			
			}
		}
		
	</script>

▼ 팝업 내부 코드선언 부분(다른 html파일로 작성하였다.)

<h1>내 팝업</h1>
	- 환영 합니다.
	<label>
		<input type="checkbox" id="oneDay"> 오늘 하루 동안 안보기
	</label>
	<button type="button" onclick="myPopupClose();">창 닫기</button>
	
	<!-- 쿠키 공통 함수가 저장된 외부파일 불러오기 -->
	<script type="text/javascript" src="cookie.js"></script>
	<script type="text/javascript">
		function myPopupClose(){
			/*
				document.querySelector -> css 선택자로 html 요소 선택
				checked -> 체크가 되어 있다면 true 안되어 있다면 false반환
			*/
			let isCheck = document.querySelector('#oneDay').checked;
			if(isCheck){ //체크가 되어 있다면 쿠키 값 저장				
				//myPopupClose=Y 하루 유지			
				setCookie('myPopupClose', 'Y', 1);
			}
			close();			
		}
	</script>

▼ 결과확인

>> 체크박스 선택 후 창닫기 버튼을 클릭하면 쿠키에 값이 저장되기때문에 다시 새창열기를 시도해도 창이 열리지 않는다.(쿠키 삭제시 다시 열린다.)

2. alert

- 사용자에게 경고창을 나타내고 테이터를 보여주는 창 출력

- alert창 뜬 후에 확인 버튼이 눌러져야 아래의 코드가 실행된다.

<script type="text/javascript">
		alert('안녕하세요.');
		console.log('alert 종료');
	</script>

3. confirm

- 사용자에게 진행 여부를 확인하는 창

- 확인을 눌렀을 경우 리턴값 true, 취소를 눌렀을 경우 false 반환

<script type="text/javascript">
		if(confirm('정말 저장하시겠습니까?')){
			//확인 눌렀을 경우 출력
			console.log('저장되었습니다.');
		}else{
			//취소 눌렀을 경우 출력
			console.log('저장 취소 되었습니다.');
		}
	</script>

4. setInterval, clearInterval

- setInterval -> 1번째 인수 함수, 2번째 인수 시간 : 2번째 인수 시간 주기로 1번째 인수 함수 실행

- clearInterval -> 1번째 인수 setInterval 이벤트 번호 : 동작하고있는 setInterval 이벤트 동작 중지

<button type="button" onclick="myClearInterval()">반복 중지</button>
	<script type="text/javascript">
		var cnt = 0;
		var intervalNumber = setInterval(function(){
			cnt++;
			console.log(cnt);
			if(cnt == 10){
				clearInterval(intervalNumber);
			}
		}, 1000);
		
		function myClearInterval(){
			if(confirm('동작을 중지 하시겠습니까?')){
			clearInterval(intervalNumber);
			}
		}
		
	</script>

>>> 값이 1초당 1씩증가하여 10이될경우 자동으로 중단된다. 반복중지 버튼 클릭시 즉시중단된다.

5. setTimeout, clearTimeout

- setTimeout -> 1번째 인수 함수, 2번째 인수 시간 : 2번째 인수인 시간 이후에 1번째 인수 함수를 실행

- clearTimeout -> 1번째 인수 setTimeout의 이벤트 번호 : setTimeout 이벤트 실행 전 중지

<button type="button" onclick="myClearTimeout()">창 닫기 중지</button>
	<script type="text/javascript">
		var timeoutNumber = setTimeout(function(){
			close();
		}, 5000);
		function myClearTimeout(){
			if(confirm('창 닫기를 중지 하시겠습니까?')){
				clearTimeout(timeoutNumber);
			}
		}
	</script>

>>> 값이 1초당 1씩증가하여 5가되면 창이 자동종료된다. 창 닫기중지 버튼 클릭시 창 종료가 중단된다.

'javascript' 카테고리의 다른 글

Document API - 객체 검색  (0) 2023.05.15
html 요소 이벤트, on-- 속성, form 객체  (0) 2023.05.15
쿠키(cookie)  (0) 2023.05.15
내장객체  (0) 2023.05.15
객체생성자함수와 상속(prototype)  (0) 2023.05.15

1. 쿠키

- 브라우저에서의 쿠키는 브라우저에 간단한 텍스트형태로 데이타를 저장 할 수 있는 수단

- 쿠키 저장시 유지시간을 설정가능

▼html

<!-- 쿠키 공통 함수가 저장된 외부파일 불러오기 -->
	<script type="text/javascript" src="cookie.js"></script>
	<script type="text/javascript">
		/*
			쿠키에 데이타 저장 하는 코드			
			document.cookie = "key=value; expires=유지시간(date); path=/;";
			
			setCookie, getCookie 함수는 
			모든 페이지에서 사용되는 공통 함수 임으로 외부파일로 만든다.
			(만든 파일 명 cookie.js)			
		*/
		
		//myName이라는 명칭으로 홍길동 값을 하루 유지 시키겠다.
		setCookie('myName', '홍길동', 1);
		setCookie('myAge', 20, 1);
		
		console.log(document.cookie, '저장된 쿠키값 확인');
						
		console.log(getCookie('myName'), '쿠키값 가지고 오기');
	</script>

 

▼js파일(cookie.js)

/**
 * 쿠키 저장 및 호출 함수
 * 
 * document.cookie = "key=value; expires=유지시간(date); path=/;";
 */

function setCookie(cname/*키*/, cvalue/*값*/, exdays/*유지 일*/) {
	const d = new Date(); //오늘 날짜 기준으로 날짜 정보 객체화
	//오늘 날짜 시간을 숫자형태로 가지고 오기 + 하루 기준으로 날짜 계산 후 매개변수값 곱하기
	//날짜 정보 객체화 된 정보로 계산된 날짜를 재갱신
	d.setTime(d.getTime() + (exdays*24*60*60*1000));
	//쿠키에 저장될 수 있는 날짜 문자열로 변수에 저장
	let expires = "expires="+ d.toUTCString();
	//쿠키에 저장 될 수 있는 포맷형태로 문자결합 연산자를 활용하여 연산 시켜 저장
 	document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie(cname/*키*/) {
	//name 이라는 변수  key= 문자 결합을 하여 저장
	let name = cname + "=";
	//쿠키의 데이타 중 인코딩된 데이타를 디코딩하여 원본으로 복원
	//decodedCookie 변수에 쿠키에 저장된 문자열을 대입
	//예)myName=홍길동; myAge=20
	let decodedCookie = decodeURIComponent(document.cookie);
	/*
		split('문자열') -> 문자열 객체의 메서드 : 인수에 삽입된 문자열 기준으로 
		문자열을 쪼개어 배열로 변환
		예) ['myName=홍길동', ' myAge=20']
	*/
	let ca = decodedCookie.split(';');
	//배열로 변환된 쿠키값을 반복문을 통해 요소에 접근
	for(let i = 0; i <ca.length; i++) {
		let c = ca[i]; //요소에 접근하여 c변수에 대입
		while (c.charAt(0) == ' ') { //요소의 첫번재가 공백이라면 
			c = c.substring(1); //첫번째 공백을 없애기
		}
		//c 변수에는 'myName=홍길동', 'myAge=20';
		
		//요소의 값 중 매개변수로 넘어온 값의 처음 문자열이 같다면
		//c -> myName=홍길동
		//name -> myName=
		//c.indexOf(name) -> c 요소에 myName= 포함되어 있다면 index값 반환
		if (c.indexOf(name) == 0) {
			//name -> myName= > 크기
			//c -> myName=홍길동 => 크키
			//substring 메서드를 통해 결괏값 '홍길동'
			return c.substring(name.length, c.length);
		}
	}
	return "";
}

▼결과확인

'javascript' 카테고리의 다른 글

html 요소 이벤트, on-- 속성, form 객체  (0) 2023.05.15
브라우저 객체 모델(window)  (0) 2023.05.15
내장객체  (0) 2023.05.15
객체생성자함수와 상속(prototype)  (0) 2023.05.15
객체(메서드)  (0) 2023.05.15

1. 내장객체

- 주로 new 연산자를 활용하여 객체화를 한다.

- 문자, 날짜, 배열, 수학 객체 등이 있다.

1) 날짜 정보 객체

- 브라우저가 설치된 컴퓨터 기준의 날짜를 출력

- 1000 -> 1초

- 1000 * 60 * 60 * 24 = 하루(프로그램상)

1-1) 날짜정보 객체 메서드

1-2) 날짜정보 객체 실습

실습1. 날짜 정보 객체 메서드를 활용하여 'yyyy-mm-dd' 포멧형태의 오늘 날짜를 출력하여라.

2) 배열 객체

- 하나의 저장소를 나누어 자료를 저장할 수 있는 객체

- 배열에는 index라는 주소를 가지고 있다.

- index의 시작은 0부터이다.

- 배열에 값을 저장 혹은 값을 가지고 오기 위해서는 index를 활용하여 요소에 접근해야 한다.

2-1) 배열 메서드

- 배열 순서 바꾸기, 배열 합치기, 배열 재정렬, 배열 요소 삽입, 배열 요소 제거 등 다양한 기능을 가진

메서드가 있다.

3) 문자열 객체

- 문자형 데이터를 객체처럼 취급하는 방식

- 문자형 데이터도 객체임으로 문자열에 관련된 메서드가 존재한다.

- 문자열의 index 찾기, 문자열 치환, 문자열을 특정 문자 기준으로 나누어 배열로 변환, 문자열 자르기등

1. length -> 문자열 길이

2. charAt(index) -> 문자열의 인수값에 해당되는 index의 문자 반환

3. indexOf('찾는 문자열') -> 인수와 일치하는 문자열의 index 반환

lastIndexOf('찾는 문자열') -> 문자열을 뒤에서 부터 검색하여 인수와 일치하는 문자열의 index 반환

4. replace('찾는 문자열', '바꿀 문자열') -> 첫번째 인수에 해당되는 문자열을 2번째 인수로 치환

replaceAll('찾는 문자열', '바꿀 문자열') -> 첫번째 인수에 해당되는 문자열을 2번째 인수로 전체 치환

5. substring(index, index) -> 문자열의 1번째 인수 부터 2번째 인수의 앞 문자열까지 잘라서 반환

substring(index) -> 첫번째 인수에 해당되는 인덱스 부터 마지막 문자열 까지 잘라서 반환

6. split('문자열') -> 인수에 해당되는 문자열 기준으로 문자열을 잘라 배열로 반환

7. trim() -> 문자열의 앞,뒤 공백 제거 (replace를 활용한 공백제거)

8. toLowerCase() -> 영문 대문자를 소문자로 변환

toUpperCase() -> 영문 소문자를 대문자로 변환

 

'javascript' 카테고리의 다른 글

브라우저 객체 모델(window)  (0) 2023.05.15
쿠키(cookie)  (0) 2023.05.15
객체생성자함수와 상속(prototype)  (0) 2023.05.15
객체(메서드)  (0) 2023.05.15
내부함수(재귀함수), 콜백함수, 크로져  (0) 2023.05.15

+ Recent posts