본문 바로가기
CodeIt_Sprint/인터렉티브_자바스크립트

(2)인터렉티브_자바스크립트_특정 태그에 핸들러 적용하기(요소노드.onclick프로퍼티), Window객체,document객체(Dom모델), console.log() VS console.dir(), DOM 트리 구조

by 코잼민 2024. 11. 28.

● 이론1 : 버튼태그를 querySelector() || getElement...()로 변수 저장한 후, 버튼을 누를 시, 어떠한 동작 구현 코드 작성 => 노드.onclick 프로퍼티 + 핸들링 , 핸들러 작성

○ 개념1 : // 버튼을 누를 시, 동작 구현 해보기

  • 순서1_ getElement() || querySelector() 로 요소노드로 변수에 저장
  • 순서2_  요소노드의 프로퍼티인 onclick <= 핸들링 대입
  • 순서3_  핸들러로 구현할 코드 작성

○ 연습 문제 1 :

- index.html

<!DOCTYPE html>
<html lang="ko">

<head>
  <meta charset="UTF-8">
  <title>JS with Codeit</title>
</head>

<body>
  <div>
    <button id="myBtn">Click!</button>
  </div>
  <script src="/src/index2.js"></script>
</body>

</html>

- "Click!"버튼을 누를 시, console창에 "시발련아" 문자열 출력하도록 js작성하기 하기

답 :

//순서1_ 버튼태그 요소노드 변수로 저장
const btn = querySelector('#nyBtn');

//순서2,3_ 요소노드.onclick에 핸들링 초기화 , 핸들러 구현
btn.onclick = function()
{
	console.log('시발련아');
}

○ 연습 문제 2:

alert('message');

alert라는 함수를 사용하면, 브라우저에 경고창을 띄울 수 있습니다.

주어진 코드를 실행했을 때 화면에 나타나는 채점이라고 적힌 button 태그를 클릭하면 정답입니다!👏🏻라는 경고창이 나타나도록 코드를 작성해 주세요. (박수 이모지 만들기가 어렵다면 본문의 글을 복사해서 붙여넣어 보세요)

단, HTML 태그에 직접 이벤트 핸들러를 등록하지 말고 자바스크립트 파일에서 코드를 작성해 주세요.

답 :

-실습문제.js

//순서1_ 버튼태그 요소노드 변수로 저장
const btn = document.querySelector('#grade');

//순서2,3_ 요소노드.onclick에 핸들링 초기화 , 핸들러 구현
btn.onclick = function(){
  alert('정답입니다!👏🏻');
}

○ 개념2 : 태그의 onclick속성에 직접 핸들러 적용하기

<button id="myBtn" onclick="console.log('Hello Codeit!')">클릭!</button>

§ 근데 잘 안사용함

 

● 이론2 : Window 객체 

○ 개념

  • Window객체 정의 : 웹 브라우저의 기능, 설정 들을 접근할 수 있는 객체
  • ex_ window.innerWidth, window.innerHeight //브라우저 창의 크기 설정
  • ex_ window.open(), window.close() //브라우저 창 열기 닫기의 프로퍼티 메소드
  • ex_ window.document , window.console //우리가 사용했던 console과 document도 window의 프로퍼티 객체이다.
  • 즉, window 객체모든 객체들의 최상단 객체(Global Object)이다.
  • 대게 window.document를 생략하며 사용한다.

● 이론3 : Dom 객체 (Document Object Model)

○ 개념 : 

  • 웹브라우저 ⊃ Html 문서 => Window객체 ⊃ Dom 객체
  • Dom객체는 Html문서를 대변하는 객체이므로, console.log(document) 출력결과 => html문서의 전체 코드가 출력된다.
  • 만약, 객체형태로 document 내부의 어떤 프로퍼티 구성이 있는지를 출력으로 보고싶다면, console.dir(document);를 하면 된다.

● 이론4 : console.log() vs console.dir()

○ 개념 : 

  • 중요한 핵심은 보통 console.log(객체) ||  console.dir(객체) 일때, 용도만 잘 구분하면 된다.

- console.log(객체) : 객체의 태그 전체 구성을 알고싶을 때, 사용

- console.dir(객체) : 객체의 프로퍼티의 구성을 알고싶을 때, 사용

  • 그냥 내신용느낌의 log() vs dir() 구분

◎ console.log( 리터럴 ) vs console.dir(리터럴) //리터럴 : 숫자 , 문자열 , bool 값

- console. log( 리터럴 )  : 자료형은 유지가 된 체, 그대로 값 출력

- console. dir( 리터럴 )  : 자료형이 모두 문자열로 출력된다.

Ex_

console.log('--- str ---');
console.log(str);//문자형 출력 console창에 시발련아 출력
console.dir(str);//문자형 출력 console창에 '시발련아' 따옴표랑 같이 출력됨
console.log('--- num ---');
console.log(num); //숫자값 출력
console.dir(num); //숫자값이 문자열형태로 출력
console.log('--- bool ---');
console.log(bool); //bool 값 출력
console.dir(bool); //bool 값이 문자열 형태로 출력

◎ console.log( 코어객체 ) vs console.dir( 코어객체 ) //코어객체 : Array, String ,Date 으로 태그형태가 아니므로, 

console. log( 코어객체 )  : 모든 배열의 원소 출력 ex_ [1,2,3]

console. dir( 코어객체 )  : 모든 배열의 원소 출력 ex_ [1,2,3]

◎ console.log( 프로토타입 객체 ) vs console.dir( 프로토타입 객체  ) //프로토타입 객체 (new Object()) //참고로 얘도 태그는 아니므로, console.log는 코어객체의 프로퍼티 구성과 값이 출력된다.

console. log( 프로토타입 객체  )  : 모든 프로퍼티 구성과 속성값 출력

console. dir( 프로토타입 객체  )  : 모든 프로퍼티 구성과 속성값 출력

▣ Ex_

- Js코드 :


const obj = {
  "blue": [1,2,3,4,5],
  "red" : ['a','b','c','d'],
};

console.log(obj);
console.dir(obj);

console.log(obj["blue"]);
console.dir(obj["blue"]);

-츨력결과 :

{ blue: [ 1, 2, 3, 4, 5 ], red: [ 'a', 'b', 'c', 'd' ] }
{ blue: [ 1, 2, 3, 4, 5 ], red: [ 'a', 'b', 'c', 'd' ] }
[ 1, 2, 3, 4, 5 ]
[ 1, 2, 3, 4, 5 ]

● 이론4 : Html문서는 Dom리로 구성되어있다. 

  • "안녕하세요." , "리엑트", "가상돔" , "엘리먼트"를 텍스트 노드라 하고,
  • 나머지 텍스트 노드의 직전 부모 노드 || 태그 자체요소노드라 한다.
  • 그래서, 어쩌라고? => 다양한 방법으로 Dom트리 구조에서 원하는 노드를 접근하는 방법, 접근하여, 변수에 저장하는 방법을 공부할 것이다. //이게 핵심