본문 바로가기
프로그래밍/개발 언어

Unit11-[JS/브라우저] DOM

by monicada 2022. 5. 17.
728x90

DOM이란 

DOM: Document Object Model

HTML요소를 object처럼 조작할 수 있는 모델 

html에 javascript를 적용하기 위해서는 <script> 태그를 이용 

<script src="myScriptFile.js"></script>

 

 

DOM구조를 조회할 때에는 console.dir이 유용 

console.dir은 console.log와 달리 DOM을 객체의 모습으로 출력 

 

DIV와  DOM의 관계도 

 body가 가장 상위에 있고, 아래의 여러 구성요소가 부모-자식 관계를 가지고 있음 

https://pridiot.tistory.com/160

이러한 자료구조를 컴퓨터 공학에서는 '트리구조'라고 말함 

 

DOM의 CRUD

creat : 엘리먼트를 만들고 

read : 조회하고 

update : 갱신하고 

delete : 삭제하는 

 

예)

- div element를 변수 tweeDiv에 할당하기 

const tweeDiv = document.creatElement('div')

 

- creat에서 생성한 tweeDiv를 트리구조와 연결하기 

append 라는 메서드를 사용해서, 변수 tweeDiv를 <body>에 넣기 

document.body.append(tweetDiv)

 

- read 

자바스크립트에서 원시 자료형인 변수의 값을 조회하기 위해서는 변수의 이름으로 직접 조회 가능

참조 자료형인 배열은 index, 객체는 key를 이용해 값 조회 가능 

DOM은 HTML 엘리먼트의 정보를 조회하기 위해서는 querySelector의 첫번째 인자로 셀렉터를 전달하여 확인 가능 

셀렉터로는 html의 요소 ("div"), id("#tweetList"), class(.tweet) 세 가지가 가장 많이 사용됨 

*querySelector사용법

const oneTweet = document.querySelector('.tweet')

 

- 여러 개의 요소를 한 번에 가져오기 위해서는 querySelectAll을 사용 

조회한 html 요소들은 배열처럼 for문을 사용할 수 있음 / 그러나 배열은 아님. 정식 명칭은 Array-like Object

const tweets = document.querySelectorAll('.tweet')

 

다른 DOM 조회 메서드 

const getOneTweet = document.getElementByID('container')
const queryOneTweet = document.querySelector('#container')
console.log(getOneTweet === queryOneTweet) //true

 

- container의 맨 마지막 자식 요소로 tweeDiv 추가하기 

const container = document.querySelector('#container')
const tweeDiv = document.createElement('div')
container.append(tweetDiv)

 

- update

oneDiv라는 이름의 <div> 요소 만들기 

const oneDiv = document.createElement('div');
console.log(oneDiv) //<div></div>

 

textContent를 이용하여 비어있는  div 엘리먼트에 문자열 입력 

oneDiv.textContent = 'dev';
console.log(oneDiv)

 

css 스타일링이 적용될 수 있도록 div 엘리먼트에 class를 추가 

oneDiv.classList.add('tweet')
console.log(oneDiv) // <div class='tweet'>dev<div>

 

append를 이용해 container의 자식 요소로 추가 

const container = document.querySelector('#container)
container.append(oneDiv)

 

- delete

삭제하려는 요소의 위치를 알고 있는 경우 

const container = document.querySelector('#container')
const tweetDiv = document.creatElement('div')
container.append(tweetDiv)
tweetDiv.remove() //append했던 요소를 삭제

 

여러개의 자식 요소를 지우려는 경우 innerHTML을 이용

document.querySelector('#container').innnerHTML = '';

 

removeChild: 자식요소를 지정하여 삭제하는 메서드 

자식요소가 남아있지 않을 때까지, 첫번째 자식 요소를 삭제하는 코드 

const container = document.querySelector('#container');
while (container.firstChild) {
container.removeChild(container.firstChild);
}

 

제목까지 사라지는 것을 방지하는 방법

const container = document.querySelector('#container');
while (container.children.length > 1) {
  container.removeChild(container.lastChild);
}

 

유효성 검사 코드 

let elInputUsername = document.querySelector('#username')

let elFailureMessage = document.querySelector('.failure-message')
let elSuccessMessage = document.querySelector('.success-message')

// 1.아이디 입력창 (elInputUsername)에 글자를 키보드로 입력할 때 (onkeyup)
elInputUsername.onkeyup = function () {
    

    //2-1. 조건문
    if(isMoreThan4Length(elInputUsername.value)){
        //성공 메세지가 보여야 함
        elSuccessMessage.classList.remove('hide')
        //실패 메세지가 가려져야 함
        elFailureMessage.classList.add('hide')
    }
    else{
        //성공 메세지가 가려져야 함
        elSuccessMessage.classList.add('hide')
        //실패 메세지가 보여야 함
        elFailureMessage.classList.remove('hide')
    }
}

// 2.글자 수가 4개 이상이면 (true/false 를 return하는 함수)
function isMoreThan4Length(value){
    return value.length >=4
}
// 1) 두 개의 값을 입력으로 받아 일치 여부를 판단하는 함수 `isMatch`가 있어야 합니다
//     2) 두 개의 값을 입력해서 일치하면 true를 반환합니다
//     3) 두 개의 값을 입력해서 일치하지 않으면 false를 반환합니다

function isMatch(input1, input2) {
  if (input1 === input2) {
    return true;
  }
  return false;
}
// 1) 비밀번호 확인창에 keyup 이벤트 핸들러가 존재해야 합니다
// 2) 비밀번호 확인창에 값이 입력될 때, 비밀번호 값이 서로 일치하지 않으면 `.mismatch-message` 메시지가 보여야 합니다
let elPassword = document.querySelector("#password");
let elPasswordRetype = document.querySelector("#password-retype");
let elMissmatchMessage = document.querySelector(".mismatch-message");

elPasswordRetype.onkeyup = function() {
  if(elPassword.value !== elPasswordRetype.value) {
    elMissmatchMessage.classList.remove("hide");
  }
  else {
    elMissmatchMessage.classList.add("hide");
  }
}

'프로그래밍 > 개발 언어' 카테고리의 다른 글

문자열  (0) 2022.05.18
조건문  (0) 2022.05.18
JavaScript 문법정리  (0) 2022.05.16
원시 자료형과 참조 자료형  (0) 2022.05.12
객체(Object)  (0) 2022.05.11

댓글