프로그래밍/Javascript

Javascript 3일차 -window객체,Date객체,DOM, 노드

윤도ri 2022. 1. 12. 18:52

<객체예제1-자동차>

1.prompt 사용하여 초기 비밀번호 설정하기

 - let pw_input = prompt ("자동차 초기 비밀번호 입력");

2.초기 이미지는 "출발전.png"로 설정 

- <body> 안 img  src속성에 넣어주기.

3.textarea(status), img(img), button(on,off) ,input(pw)모두 style 변경 해주어야 하므로 모두 데려오기 

  let status = document.getElementById("status")

  let img = document.getElementById("img")

  let on = document.getElementById("on")

  let off = document.getElementById("off")

  let pwTag = document.getElementById("pw")

 

4.input 태그 객체 안보이게 해두기 

  pwTag.style.visibility = "hidden";

5.

1) 시동 켜기 클릭시 시동이 꺼져 있다면 input태그객체.style.visibility ="visible"설정 

(이미 켜져있다면 시동이 이미 켜져있습니다 textaea태그에 대입하기)

 engine:false;

 

 engineStart=function(){

  if(! this.engine){

  let visibility = pwTag.style.visibility; 

   if(visibility="hidden"){

     pwTag.style.visibility ="visible";

    }

  }else{

 status.innerHTML = "시동이 이미켜져있습니다."

}

}

 

6.비밀번호 입력후 엔터 누르면 비밀번호 체크 

7.비밀번호 3회 연속 오류시 "경찰 출동중" 경고 텍스트 textarea태그에 대입 후 이미지는 경찰.png설정

8.시동켜기,시동끄기 버튼객체.style.display=none으로 설정 

9.3회 오류 전 시동 켜기 성공시 오류 횟수 초기화

10.시동이 켜지면 "시동켜짐" textarea태그에 대입 이미지 바꾸기 (시동꺼짐도 마찬가지)

11.초기화버튼 클릭시 history.go(0)로 새로고침

 

- let cnt = 0; (비밀번호 3번 잘못 누를시 경찰 불러야하므로)

  if(! this.engine){

  let visibility = pwTag.style.visibility; 

   if(visibility="hidden"){

     pwTag.style.visibility ="visible";

    }

   else{

    let pw = pwTag.value; 

    if(this.pw == pw){

     img.src="./시동켜기.gif"

     status.innerHTML = "시동 켜짐";

     pwTag.value="";

     pwTag.style.visibility = "hidden";

     this.engine = true; 

     cnt = "0 "

    }else{

      cnt++;

     status.innerHTML = `비밀번호 오류: ${cnt}회`

    if(cnt==3){

         img.src = "./경찰.png";

         status.innerHTML = "경찰출동";

         pwTag.style.visibility = "hidden";

         on.style.display = "none";

         off.style.display = "none";

    }

   }

 }

  }

시동켜기
시동끄기&nbsp;

>콜백 함수(Callback Function)
 - 파라미터로 함수를 전달받아서 함수의 내부에서 호출하는 함수 

 - 자바스크립트의 비동기 처리 방식의 문제점을 해결해주기 위해 특정 시점에서 호출이 되도록 사용하는 함수이다. 

  쉽게 말하면 콜백함수 문법은 특정 함수의 동작이 끝남과 동시에 다른 여러가지 함수를 호출해야 할 경우에 사용된다.

 

*자바스크립트의 비동기 처리란? 

 : 특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 자바스크립트의 특성.

(출처:https://kongda.tistory.com/20)

 

>window 객체

- 현재 웹브라우저의 창이나 탭을 표현하기 위한 객체 
- 비표준 객체 

1.timeout

- 일정 시간 뒤에 수행해야 하는 기능이 있을 때 사용한다. 

 

 1)setTimeout(콜백함수, n) 

  - n밀리초 이후에 넘겨준 콜백함수를 호출한다.

 2)clearTimeout 

  - 만들어진 timeout  기능을 없앤다. 

  ex) 

   let timeout = setTimeout(()=> { alert("Hello World")}, 5000)

                                             //콜백함수: (setTimeout()함수를 5초 수행한 후에 익명함수를 수행해라.)

   clearTimeout(timeout)

 

2.interval

 -일정 시간 마다 수행해야 하는 기능이 있을떄 사용한다.

 

 1)setInterval(콜백함수, n)

  - n 밀리초마다 넘겨준 콜백함수를 호출한다.

 2)clearInterval

  - 만들어진 interval기능을 없앤다.

 

 ex) 

  let interval = setInterval( ()=>{alert("Hello world")}, 5000);

 

  clearInterval(interval);

 

>Date객체

-시간에 대한 정보들을 가지고 있는 객체 

1.현재시간 나타낼 경우 

  new Date() 

2.시간을 직접 입력하고 싶을 경우 

  new Date(2022,0,12,10,32,33)  // 2022-01-12 10:32:33

  *년도는 뒤의 두글자만 적을지 19년도로 인식함 또한 월은 0월부터 시작하므로 원하는 월보다 -1 적게 

   적어주어야 한다. 시,분,초는 같다. 

3.현재년도, 월,일,시,분,초 각각 데려오고 싶을 경우

  const date = new Date;

 

  현재년도 : date.getFullYear()

  월         :  date.getMonth()

  일         :  date.getDate()

  시         :  date.getHours()

  분         :  date.getMinutes()

  초         :  date.getSeconds()

 

<Date객체 예제-현재시간 실시간으로 보여주기>

 

>문서 객체 모델(Document Object Model) ★★★
- xml 이나 html 문서에 접근하기 위한 일종의 인터페이스 
- 문서내의 모든 요소를 정의하고 요소에 접근하는 방법을 제공 

 

<html>
   <head>
        <title>초간단 문서</title>
   </head>
   <body>
        <h2>초간단 문서</h2>
        <p>>간단한 문서</p>
   </body>
   </html>

마치 가계도와 유사하다. 부모, 자식, 자손간의 관계를 보여주는 듯 하다.

>document 객체 
- 웹 페이지 자체를 의미
- 웹페이지에 존재하는 HTML 요소에 접근할 때에는 반드시 document 객체로부터 시작 

 

    getElementById()                    :해당 값을 id속성으로 가지고 있는 요소 선택 
    getElementsByTagName()         :해당 태그인 요소 선택(Array) 
    getElementsByClassName()      :해당 값을 class속성으로 가지고 있는 요소 선택(Array)
    getElementsByName()             :해당 값을 name속성으로 가지고 있는 요소 선택(Array)
    querySelector()                      :CSS선택자에 해당하는 요소 선택 
    querySelectorAll()                   :CSS선택자에 해당하는 요소 선택(Array)

클래스,이름,id속성을 가져와서 함수를 수행하는 방법의 예이다.
querySelector , querySelectorAll 사용한 예이다.&nbsp;
p태그에 A B C 클래스가 있을때 어떻게 한 클래스만 제거하는 지에 대한 방법이다.

>노드(Node)

 - HTML DOM은 노드라고 불리는 계층적 단위에 정보를 저장한다. 
 - 노드트리는 노드들의 집합이며 노드간의 관계를 보여준다. 

 

<노드의 종류>

  문서 노드(document 노드)    :문서 전체를 나타내는 노드
     
  요소 노드(element 노드)      :HTML 요소(태그)는 요소 노드이며 속성 노드를 가질 수 있는 유일한 노드

  속성 (노드)(attribute 노드)    :HTML 요소의 속성은 속성노드이며 요소노드에 관한 정보를 가지고 있음. 

  텍스트 노드(text노드)         :HTML 문서의 모든 텍스트는 텍스트 노드

                                       *요소와 주석 노드 사이사이에 존재한다. 

  주석 노드(comment 노드)   :HTML 문서의 모든 주석은 주석 노드

 

<노드간의 관계>

    parentNode      :부모노드 
    childNodes       :자식노드들 (children : 자식 요소인 노드들)
    firstChild          :첫번째 자식노드
    lastChild           :두번쨰 자식노드      <----요소인 노드만 데리고 오는 경우 중간데 Element 써주기 
    nextSibling       :다음 형제노드                     ex)firstElementChild 
    previousSibling :이전 형제노드

          

&lt;노드종류 예제&gt;body위에 script 를 적어주면 위에서 아래로 읽으므로 값을 찾을 수 없다. 그래서 위에 script를 적어주고 싶을 때는 window.onload 를 사용한다.

<노드추가>

    appendChild()   :새로운 노드를 해당 노드의 자식 노드 리스트 맨 마지막에 추가한다.
    insertBefore()    :새로운 노드를 특정 자식 노드 바로 앞에 추가한다.
    insertData()      :새로운 텍스트 데이터를 텍스트 노드에 새롭게 추가한다. (문자열안에 넣어주는 의미가 아니다.)

insertData는 말그대로 텍스트노드에 새로운 텍스트 데이터를 넣어주는것이다. 그래서 innerHTML 과는 다르다. 또한 TEXT노드는 object 객체이며 innerHTML 은 String 이어서 완전히 다른 개념이라고 생각하면 된다.

*나의 궁금증 innerText vs innerHTML 

1.innerText

-innerText는 'Element'의 속성으로, 해당 Element 내에서 사용자에게 '보여지는' 텍스트 값을 읽어온다.

ex)<div style='color:red'>A</div>

 

2.innerHTML 

- innerHTML은 'Element'의 속성으로, 해당 Element의 HTML, XML을 읽어오거나, 설정할 수 있다.

 

ex)A
출처: https://hianna.tistory.com/483 [어제 오늘 내일]