2022년 11월 3일 목요일

자바스크립트 8강(DOM)

 1. 문서 객체 모델(DOM)이란?

웹 문서의 모든 요소를 자바스크립트를 이용하여 조작할 수 있도록 객체를 사용해 문서를 해석하는 방법.


2. DOM 트리

DOM을 조작하기 위해서는 웹문서 요소의 구조를 알아야 한다. 

DOM의 구조는 부모 요소, 자식 요소로 되어 있다. 

예)

<body>

    <h1>제목</h1>

    <p>본문</p>

</body>

위의 소스 코드는 아래와 같은 연결 관계가 있다.

            <body>   //부모 요소

<h1>                        <p> //자식 요소

-웹 문서의 태그는 요소 노드로 표현한다.

-태그가 품고 있는 텍스트는 해동 요소 노드(태그)의 자식 노드인 텍스트(Text) 노드로 표현

-태그의 속성은 모두 해당 요소 노드(태그)의 자식 노드인 속성(Attribute) 노드로 표현

-주석은 주석 노드로 표현


3. DOM 요소에 접근하기

<body>
<div id="container">
    <h1 id="heading">에디오피아 게뎁</h1>
    <div id="prod-img">
        <img src="images/coffee-pink.jpg" alt="에디오피아 게뎁">
    </div>
    <div id="desc">
        <h2 class="bright">Information</h2>
        <p>2차 세계대전 이후 설립된
            <span class="accent">게뎁농장</span>은  
            <span class="accent">SCAA 인증</span>을 받은 커피
        </p>
        <h2>Flavor Note</h2>
        <p class="bright">은은하고 다채로운 꽃향, 망고, 다크 체리, 달달함이 입안 가득.</p>
    </div>
</div>
</body>

위와 같은 구조가 있다면~

(1) id 선택자로 접근하는 함수 : getElemenById()

document.getElementById("heading"); //결과 : <h1 id="heading">에티오피아 게뎁</h1>

이렇게 접근하고, 이벤트를 연결해 해당 요소에 함수를 적용할 수 있다.

//해당 요소를 클릭하면 폰트 사이즈가 변한다.

document.getElementById("heading").onclick = function() {

    this.style.fontSize = "5em"; 

}

(2) class 값으로 접근하는 함수 : getElementsByClassName()

class 선택자는 id와 다르게 2개 이상의 웹 요소에 접근이 가능하다. 배열과 비슷하다.

document.getElementsByClassName("accent"); //결과 [span.accent, span.accent]

1개만 접근하고 싶으면 배열의 인덱스처럼 해야 한다.

document.getElementsByClassName("accent")[0]; //결과 : <span class="accent">게뎁농장</span>

document.getElementByClassName("accent")[0].style.textDecoration="underline"//결과:게뎁농장에 밑줄 생김

(3) 태그 이름으로 찾아내는 함수 : getElementsByTagName()

id, class가 없는 DOM 요소에 접근 할 때 태그 이름으로 접근한다. 태그 이름은 중복이 많기에 배열로 저장하고 접근할 수 있다.

document.getElementsByTagName("h2"); //결과 [h2, h2] 

//h2 요소 중 첫번째 요소의 배경색을 바꾼다.

document.getElementsByTagName("h2")[0].style.backgroundColor='#eee';

(4) id, class, 태그이름 다 사용할 수 있는 querySelector(), querySelectorAll() 함수

document.querySelector(".클래스명"); //클래스로 접근할 때는 마침표(.)을 앞에 붙인다.

document.querySelector("#id"); //id로 접근할 때는 샵(#)을 앞에 붙인다.

document.querySelector("태그이름"); //태그 이름으로 접근할 때는 이름만 쓴다.

document.querySelectorAll(); //배열 형식으로 접근할 때 사용


4. DOM에서 이벤트 처리 하기

var pic=document.querySelector('#pic');

pic.onclick= changPic; //pic 요소를 누르면 changPic()함수 실행

function changPic() {

    pic.src="images/boy.png";

}

addEventListener() 함수로 여러 이벤트 한번에 처리하기

var pic = document.querySelector('#pic'); 

pic.addEventListener("mouseover", changePic, false); //마우스 올리면 남자 그림으로 변경

pic.addEventListener("mouseout", originPic, false);  //마우스 벗어나면 여자 그림으로 변경

function changePic() {

  pic.src = "images/boy.png";

}

function originPic() {

  pic.src = "images/girl.png";

}


5. DOM에 요소 추가하기

(1) createElement() : 새 요소 노드를 만든다.

(2) createTextNode() : 텍스트 내용이 있을 경우 텍스트 노드를 만든다.

(3) appendChild() : 텍스트 노드를 요소 노드에 자식 노드로 추가

(4) createAttribute() : 요소에 속성이 있을 경우 속성 노드를 만든다.

(5) setAttributeNode() : 속성 노드를 요소 노드에 연결한다.

(6) appendChild() : 새로 만든 요소 노드를 부모 노드에 추가 한다.

(예제)

function newRegister() {            
  var newP = document.createElement("p");  // 새 p 요소 만들기
  var userName = document.querySelector("#userName");        
  var newText = document.createTextNode(userName.value);  // 새 텍스트 노드 만들기
  newP.appendChild(newText);  // 텍스트 노드를 p 요소의 자식 요소로 연결하기
   
  var delBttn = document.createElement("span");   // 새 button 요소 만들기
  var delText = document.createTextNode("X");  // 새 텍스트 노드 만들기
  delBttn.setAttribute("class", "del");  // 버튼에 class 속성 설정하기
  delBttn.appendChild(delText);  // 텍스트 노드를 button 요소의 자식 요소로 연결하기              
  newP.appendChild(delBttn);  //  del 버튼을 p 요소의 자식 요소로    

  var nameList = document.querySelector("#nameList");  
// p 요소를 #nameList 맨 앞에 추가하기
  nameList.insertBefore(newP, nameList.childNodes[0]);  
  userName.value = "";  // 텍스트 필드 지우기
 
  var removeBttns = document.querySelectorAll(".del");
 
  // removeBttns에 있는 요소 전체를 반복
  for (var i=0; i<removeBttns.length; i++) {  
    // i번째 버튼을 클릭했을 때 실행할 함수 선언
    removeBttns[i].addEventListener("click", function() {  
      //현재 부모 노드의 부모 노드가 있을 경우 실행
      if (this.parentNode.parentNode)  
      //현재 부모 노드의 부모 노드를 찾아 현재 노드(this)의 부모 노드(p 노드) 삭제
        this.parentNode.parentNode.removeChild(this.parentNode);  
    });
  }
}  

2022년 11월 2일 수요일

자바스크립트 7강(Array 객체)

 1. Array 객체란?

한 자료형인 항목을 하나의 변수에 여러 개 저장할 때 Array 객체를 사용한다.


2. Array 객체로 배열 만드는 법

var myArray = new Array(); //myArray 이름의 Array객체 인스턴스를 생성했다.

var numbers = new Array("one", "two", "three", "four"); //배열 객체를 만들면서 값도 넣어줬다. 


3. 배열에서 for문 사용하기

for(var i=0; i < numbers.length; i++) { 

    console.log(numbers[i]); 

}


4. Array 객체의 함수 종류

(1) 둘 이상의 배열을 연결하는 concat() 함수

var nums = ["1", "2", "3"];

var chars = ["a", "b", "c", "d"];

nums.concat(chars); //결과 :  "1", "2", "3", "a", "b", "c", "d"

chars.concat(nums); //결과 :  "a", "b", "c", "d",  "1", "2", "3" 


(2) 배열 요소를 연결하는 join()함수 

nums.join() //결과(기본 값은 ,) : 1,2,3 

nums.join("-") //결과 : 1-2-3


(3) 새로운 요소를 추가하는 push()함수와 unshift()함수

var nums = ["1", "2", "3"];

-기존 배열 맨 끝에 요소 추가: push() 함수

nums.push("4", "5"); //결과 ["1", "2", "3", "4", "5"]

-기존 배열 맨 앞에 요소 추가: unshfit() 함수

nums.unshift("-1", "0");  //결과 ["-1", "0", "1", "2", "3", "4", "5"]


(4) 배열에서 요소 추출하는 pop() 함수, shift() 함수

var nums = ["-1", "0", "1", "2", "3", "4", "5"];

- 기존 배열에서 맨 뒤에 있는 요소 추출할 때 

nums.pop(); //결과: 5

- 기존 배열에서 맨 앞에 있는 요소 추출할 때

nums.shift(); //결과: -1


(5) 원하는 위치의 요소를 삭제하거나 추가하는 splice() 함수

-인수가 1개일 경우 : 인수부터 ~ 끝까지 요소 모두 삭제

var nums = ["-1", "0", "1", "2", "3", "4", "5"];

nums.splice(2); //결과 : ["-1", "0"] 만 남음

- 인수가 2개일 경우 : 인덱스 값, 삭제할 갯 수 

var nums = ["-1", "0", "1", "2", "3", "4", "5"];

nums.splice(2, 2); //결과 :  ["-1", "0", "3", "4", "5"]

- 인수가 3개 이상일 경우 : 인덱스 값, 삭제할 갯 수, 삭제한 위치에 추가할 요소

var nums = ["-1", "0", "1", "2", "3", "4", "5"];

nums.splice(2, 3, "js"); //결과:  ["-1", "0", "js", "4", "5"] //인덱스 2부터 3개 요소 지우고 js삽입

- 기존 배열 요소를 삭제하지 않고 새로운 요소를 삽입 하려면 두 번째 인수에 0 입력

nums.splice(2, 0, "js"); //결과 : ["-1", "0", "js", "1", "2", "3", "4", "5"];


(6) 원하는 위치와 요소들을 추출하는 slice() 함수

- 시작 인덱스와 끝 인덱스를 지정해 그 사이의 요소를 추출

var nums = ["-1", "0", "1", "2", "3", "4", "5"];

nums.slice(1,4); //결과 [ "0", "1", "2", "3"] 인덱스 1~4까지 추출

* 주의점 : slice() 함수를 통해 요소를 추출해도 원래 배열은 변경되지 않는다.


자바스크립트 6강(객체)

 1. 객체란? 

복합 자료형, 객체 안에 숫자,문자열 등 여러가지 자료형이 포함, 객체 자체도 ㅈㅏ료형이기에 자료를 저장하고 처리하는 기본 단위


2. 객체의 종류

-내장 객체 : 미리 만들어져 내장되어 있는 객체(Number, Boolean, Array, Math 등)

-문서 객체 모델(DOM): 웹 문서, 이미지, 링크, 텍스트필드, 등등

-브라우저 객체 모델 : 웹 브라우저의 주소 표시줄, 창 크기 등 웹 브라우저의 정보를 객체로 다룸

-사용자 정의 객체 : 사용자가 필요할 때 마다 자신의 객체를 정의하고 사용하는 것


3. 객체의 속성과 메서드

-속성: 객체의 값을 담고 있는 정보, 속성 값을 가져올 때는 객체이름.속성이름

-메서드: 객체의 동작을 선언해 놓은 함수. 객체이름.매서드함수명(인수지정)

-객체의 인스턴스 만드는 법 : new 객체이름();

(예) var now = new Date();

     now.toLocaleString();


4. 사용자 정의 객체 만드는 법

//객체 설정

var book = {

    title: "자바스크립트",    //속성은 속성이름 : 값 으로 지정

    author: "김",

    info : function() {  //매소드는 함수이름 : 함수(인자값){} 으로 지정

        alert(this.title + " 책은 " + this.author + "이 썼다.");

    }

}

//객체 실행

book.title; //결과값 : 자바스크립트

book.info(); //결과값 : 자바스크립트 책은 김이 썼다.


5. 생성자 함수를 사용해 객체 만드는 법

-생성자 함수란? 객체를 만들어 내는 함수.

(예)

//생성자 함수를 이용해 book 함수 설정

function Book(author, pages, price, title) {

    this.author = author;

    this.pages = pages;

    this.price = price;

    this.title = title;

}

// book 객체 사용법

kimBook = new Book("김", 400, 30000, "자바스크립트");

kimBook에 들어 있는 값 : author: "김", pages:400, price:30000, title:"자바스크립트"

kimBook.title; //결과값 : 자바스크립트

2022년 11월 1일 화요일

자바스크립트 5강(함수와 이벤트)

 1. 함수란?

자주 사용하는 프로그램을 하나로 묶어서 재사용 하는 기술

함수가 어떤 명령을 처리 해야 할지 미리 알려주는 것 : 함수 선언

선언한 함수를 가져와 사용하는 것 : 함수 실행


2. 함수 선언

function 함수명(인자1, 인자2) { //인자가 없다면 ()만 입력
    //내부 프로그램

    return ; // 출력할 것이 있다면 표시

}

예) function addNumber(a, b) {

    var sum = a + b; //인자 2개를 받아서 합한 뒤 sum에 저장

    return sum; //sum 출력

}

ES6부터는 => 표기법으로 함수 선언 가능

const hi = function() { return "하여~"; } //function 선언법

const hi = () => { return "하여~"; } //화살표 표기법으로 함수 선언


3. 함수 실행

함수명(인자1, 인자2); //인자가 없다면 ()로 생략 가능


4. let, constant 로 변수 선언

- 함수 안에서만 사용되는 변수 : 지역변수, 로컬 변수

- 스크립트 전체에서 사용되는 변수 : 전역변수, 글로벌 변수

- var : 변수를 선언하기 전에 사용해도 오류 발생 안하고, 재선언이 가능함, 같은 이름을 사용할 경우 덮어쓰기도 함(유연한 변수 선언), 함수 영역의 범위를 가짐.

- let : 블록 영역의 범위를 가짐, 지역 변수에 사용하기 좋음. 재할당은 가능, 재선언은 불가능, 변수를 초기화 하기 전까지는 사용할 수 없음.

- const : 상수로 선언함. 변하지 않음, 블록 레벨의 범위에 사용

- 전역 변수 선언 : 변수이름 = 초기값; //변수 이름 앞에 아무것도 적지 않음


5. 변수 선언 시 가이드

- 전역 변수는 최소한으로 사용

- var 변수는 함수의 시작 부분에 선언

- for문에서 카운터 변수를 사용할 때는 let를 사용하기

- ES6 버전을 사용하면 var보다 let를 사용하는 것 권장


6. 이벤트 다루기

이벤트란? 웹 브라우저나 사용자가 행하는 어떤 동작을 뜻함.

주로 마우스, 키보드를 사용할 때, 웹 문서를 불러올 때, Form에서 내용을 입력할 때 발생

이벤트와 이벤트 처리 함수를 연결해주는 것 : 이벤트 처리기 또는 이벤트 핸들러

이벤트 핸들러는 이벤트 이름 앞에 on을 붙여서 사용.(예) click 이벤트 - onclick

(예) 클릭 이벤트가 발생하면 상세 설명 내용은 화면에 표시하고 버튼은 감춤 

<button class="over" id="open" onclick="showDetail()">상세설명보기</button>

function showDetail() {

    document.querySelector('#desc').style.display = "block"; //상세 설명 내용을 화면에 표시

    document.querySelector('#desc').style.display = "none"; //상세 설명 보기 버튼 감춤

}


7. 여러 이벤트 다루기

<script src="js/event-dom-result.js"></script> //js경로에 있는 event-dom-result.js 파일 연결

//event-dom-result.js 파일 내용
var coverImage = document.querySelector("#cover");
        coverImage.onclick = function() {
            alert('눌렀습니다');
        };
        coverImage.onmouseover = function() {
            coverImage.style.border = "5px black solid";
        };
        coverImage.onmouseout = function() {
            coverImage.style.border = "";
        };

자바스크립트 4강(제어문)

1. if문 

if(조건1) {

//조건1이 참일 때 실행

} else if(조건2) {

//조건1은 거짓이면서 조건2가 참일 때 실행(위부터 체크 하며 내려옴)

else {

//모든 조건이 거짓일 때 실행

}

2. 조건 연산자

조건 ? true : false;

예제) var score = 75;

(score >= 60) ? alert("통과") : alert("실패");

3. switch 문

한꺼번에 여러 개의 조건을 처리할 때 쓰임

var session = prompt("관심 세션을 선택해 주세요. 1-마케팅, 2-개발, 3-디자인","1");
       
switch(session) {
   case "1" : document.write("마케팅 세션은 <strong>201호</strong>에서 진행됩니다.");
      break;
  case "2" : document.write("개발 세션은 <strong>203호</strong>에서 진행됩니다.");
       break;
   case "3" : document.write("디자인 세션은 <strong>205호</strong>에서 진행됩니다.");
       break;
   default: alert("잘못 입력했습니다.");
}

4. for 문

for(카운터 변수; 조건식; 카운터 변수 조절){

    조건식이 만족할 때까지 반복

}

예제) 구구단 구현 2중 for문 

<h1>구구단</h1>
    <script>
//1. 맨 처음 외부 for문 부터 시작
        for(var i = 2; i <= 9; i++) { //3.내부 for문이 끝나면 1 회전
            document.write("<div>");
            document.write("<h3>" + i + "단</h3>");
            for (var j = 1; j <= 9; j++) { //2.내부 for문이 끝나면 외부 for문 1회전
                document.write(i +" X " + j + " = " + i * j + "<br>");
            }
            document.write("</div>");
        }
    </script>

5. for ~ of문
주어진 값을 다 읽을 때까지 반복하는 반복문
let seasons = ["봄","여름","가을","겨울"];
for(let value of seasons) { //seasons 배열 처음부터 끝까지 반복
    console.log(value);
}

6. while문, do~while 문
var i = 0;
while(i < 10) { //조건이 false가 될 때까지 반복
    document.write("반복 조건이 true이면 반복한다<br>");
    i += 1; //이 부분이 없으면 무한 반복을 하게 된다.
}

var i = 0;
do { //반복 조건에 상관 없이 1회는 무조건 실행한다.
    document.write("반복 조건이 true이면 반복한다<br>"); //명령 실행
    i += 1; //이 부분이 없으면 무한 반복을 하게 된다.
}
while(i < 10); // 조건이 false가 되면 반복 종료

7. break문, continue문

for(i=0; i<10; i++) { //원래는 10번 반복해야 하지만~     document.write("*");
    break; //break문을 만나면 바로 반복문을 종료한다.
}

for(i=0; i<10; i++) { //원래는 10번 반복해야 하지만~     document.write("*");
    continue; //continue 문을 만나면 건너 뛰고 다시 반복한다.
    document.write("continue문 때문에 이 문장은 건너뛴다.");
}

자바스크립트 3강(변수,자료형,연산자)

1. 변수를 선언하는 규칙 3가지

(1) 이름은 의미 있게 짓는다.

(2) 여러 단어를 연결한 변수 이름은 낙타 모양으로 만들어준다.(예- birthYear)

(3) 첫 글자는 문자, 밑줄(_), 달러 기호($)로 시작해야 한다. 예약어도 사용 불가


2. 자료형의 종류

(1)기본형

- number(숫자)

- string(문자열)

- boolean(논리형)

- undefined(자료형을 지장하지 않았을 때의 유형)

- null(값이 유효하지 않을 때의 유형)

(2)복합형

- array(배열)

- object(객체)


3.자료형 특징

(1) 자바스크립트는 정수, 실수 모두 number로 취급함.

(2) 단, 실수끼리 계산할 때는 2진수로 변환하여 계산하기에 오차가 난다.

(3) 문자형은 '' 이나, ""로 묶을 수 있다. ""로 묶는 것을 권장한다.

(4) 논리형은 true/false로 표현한다.

(5) undefined 가 아직 변수에 값이 없다는 뜻이다.(타 언어의 null과 다르다)

(6) null 이 처음에 할당한 값이 더는 유효하지 않다는 뜻이다.


4. 배열

-기본 형식- 

var 배열이름 = ["값1", "값2", "값3", "값4"];  

or 

var 배열이름 = [];


-배열 출력-

배열이름[0]; 

>"값1"


5. 객체

-기본 형식-

var 객체이름 = {

    firstName: "kim",

    lastName: "goo",

    age: 35,

    address: "Seoul"

}

객체는 중괄호{} 로 묶고, 키와 값을 :을 사용하여 한 쌍으로 묶는다.


6. 연산자

사칙 연산자 : +, -, *, /

나머지 연산자 : %

증감 연산자 : ++, --


증감 연산자 주의점

(예) 

var a = 10;  //a에 10

var b= a++ + 5; //b = 15를 먼저 계산 후 , a를 1증가 시켜 a = 11 이 저장

b는? 15


var c= 10;  //c에 10 저장

var d = ++c + 5; //c를 먼저 1증가 시키고, +5 하여 d에는 16이 저장

d는? 16


7. == 연산자, === 연산자 차이

10 == "10"은 true //==연산자는 문자형과 숫자형이 있으면 자동으로 변환하여 비교

10 === "10" 은 false //=== 연산자는 다른 자료형을 변환하지 않고 비교


8. 논리 연산자

- OR 연산자: ||  

- AND 연산자: && 

- NOT 연산자: !



자바스크립트 1~2강

 Doit! 자바스크립트 입문 요약 정리 

1. 자바스크립트란? 

-웹 사이트를 동적으로 개발 가능

-웹 브라우저에 실행되는 프로그램 개발 가능

-서버를 구성하고 서버용 프로그램 개발  가능

-모든 웹 브라우저에서 동작 가능

2. 작성법

<script>태그는 HTML  문서 어디에든 사용가능

<script>태그는 한  문서 안에 여러 개  사용 가능

<script>태그가 삽입된 위치에서 소스 실행

예)

<script>
        var heading = document.querySelector('#heading');
        heading.onclick = function() {
            heading.style.color = "red";
        }
 </script>

위와 같은 방식으로 하면 해당 HTML 문서에서 밖에 사용을 못하기에
js/change.js 파일에 아래와 같이 작성하고 (확장자 명을 js로 해야한다.)

var heading = document.querySelector('#heading');
heading.onclick = function() {
heading.style.color = "red";
}

아래와 같이 파일을 연결하여 사용한다.
<script src="js/change.js"></script>

3. 자바스크립트의 입력과 출력
-사용자 입력 값 받기
prompt(); - prompt("창 내용"); - prompt("창 내용", "기본값");

- 알림창으로 출력하기
alert("알림창 내용");

-웹 브라우저 화면에 출력
document.write(변수명);

-콘솔에 출력하기
console.log(변수명);

4. 자바스크립트 작성 규칙
- 대소문자를 구별하여 소스 작성
- 읽기 쉽게 들여쓰기
- 세미콜론(;)으로 문장을 구분하기
- 한 줄 주석 : //내용
- 여러 줄 주석 : /* 내용 */
- 이름의 첫 글자는 반드시 영문자, 밑줄(_), 달러 기호($)로만 시작 가능
- 단어 사이에 공백은 안됨
- 예약어는 식별자로 사용 불가능