LeeWang_31
이왕31
LeeWang_31
전체 방문자
오늘
어제
  • 분류 전체보기 (234)
    • 프로젝트 (2)
      • 사이드 프로젝트 (2)
      • Codestates_pre_project (0)
    • 프론트엔드 (169)
      • Html (19)
      • CSS (18)
      • JavaScript (29)
      • Codestates (76)
      • 코딩노트 (27)
    • 백엔드 (10)
      • node (10)
    • 구르는 돌 🌑 (16)
      • Codestates (11)
      • 생각 (4)
      • 공부 흔적 (1)
    • 정보 (18)
      • 오류노트 (2)
      • 인텔리제이 정보 (9)
      • 깃 정보 (3)
      • 기타 정보 (4)
      • 안드로이드스튜디오 정보 (0)
    • CS (7)
      • 이론공부 (7)
    • App (6)
      • Android (3)
      • Kotlin (3)
    • 컴퓨터 수학 (5)
      • 암호론 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • DP
  • TODOlist
  • 안드로이드스튜디오범블비
  • figjam
  • 웹팩
  • css
  • 사용자 친화 웹
  • UI/UX
  • ubuntu
  • 1292
  • 알고리즘
  • 안드로이드스튜디오파이어베이스
  • 코딩애플
  • 백준
  • html
  • codestate
  • 파이어베이스연동
  • linuix 코드스테이츠
  • 코플릿
  • 2693
  • linux
  • 사용자친화웹
  • 사이드프로젝트
  • 2609
  • 자바스크립트
  • React
  • 코드스테이츠
  • JavaScript
  • 생활코딩
  • 번들링

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
LeeWang_31

이왕31

[JavaScript/Web] Dom다루기
프론트엔드/Codestates

[JavaScript/Web] Dom다루기

2022. 9. 13. 13:15

코드스테이즈 41기 교육 내용을 정리하고 있습니다.
틀린 부분이 있으면 댓글로 알려주시면 감사하겠습니다. 

DOM 다루기

Dom의 CRUD( create, read, update, delete )에 대해서 배운다.

학습 목표

  • DOM을 JavaScript로 조작하여 HTML Element를 추가할 수 있다. (CREATE)
  • DOM을 JavaScript로 조작하여 HTML Element를 조회할 수 있다. (READ)
  • DOM을 JavaScript로 조작하여 HTML Element를 변경할 수 있다. (UPDATE)
  • DOM을 JavaScript로 조작하여 HTML Element를 삭제할 수 있다. (DELETE)
  • 생성한 HTML Element를 부모 엘리먼트의 자식 엘리먼트로 포함할 수 있다. (APPEND)
  • innerHTML과 textContent의 차이를 이해한다.

심화 목표

  • DOM과 JavaScript의 차이에 대해 이해할 수 있다.
  • createDocumentFragment를 활용하여, 더 효율적으로 DOM을 제어할 수 있다.
  • HTML5 template tag 사용법을 이해할 수 있다.
  • element와 node의 차이를 이해할 수 있다.
  • children과 childNodes의 차이를 이해할 수 있다.
  • remove와 removeChild의 차이를 이해할 수 있다.
  • 같은 엘리먼트를 appendChild 하면, 기존 엘리먼트를 복사할까?
  • offsetTop 등을 이용하여 좌표 정보를 조회할 수 있다.
  • offsetWidth 등을 이용하여 크기 정보를 조회할 수 있다.

Create

document.createElement('div')

다음 코드는 새로운 div 요소를 만듭니다.
다음을 변수 tweetDiv에 넣는다하면 다음과 같습니다.

const tweetDiv = document.createElement('div')

이렇게 생성된 div는 어디에도 연결되어 있지 않기 때문에 아무런 영향을 줄수 없습니다.

Append

append는 create한 div를 연결할 수 있게 해줍니다.

document.body.append(tweetDiv)

이전에 create한 tweetDiv를 append를 통해 body에 연결했습니다.

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

다음은 container라는 id의 요소를 찾아 container변수에 넣고, div를 생성하여 tweetDiv변수에 넣습니다.
tweetDiv변수의 div태그는 container변수의 container태그에 연결됩니다.

Read

이전에 javascript에서 html요소를 사용할때 querySelector 을 사용한 적 있습니다.

document.querySelector('.tweet')

다음은 tweet이라는 class명을 갖고 있는 엘레먼트를 조회합니다.
class의 경우 id와 달리 유일하진 않습니다.
즉, html에서 하나 이상 갖을수 있습니다.
하지만 querySelector는 첫번째 엘리먼트 하나만 출력합니다.

querySelectorAll을 사용하면 같은 이름의 클래스의 요소를 유사배열로 받아 옵니다.

Update

const oneDiv = document.createElement('div');            // div태그를 생성한다
oneDiv.textContent = 'dev';                                // 'dev'라는 text를 생성된 div에 넣는다
oneDiv.classList.add('tweet');                            // 생성된 div에 'tweet'이라는 class를 추가한다
const container = document.querySelector('#container')    // container라는 id를 갖고 있는 요소를 찾는다
container.append(oneDiv)                                // container와 생성한 div를 연결한다.

Delete

요소.remove() 를 하면 삭제가 가능하다.

const tweetDiv = document.createElement('div')
container.append(tweetDiv)
tweetDiv.remove() // 이렇게 append 했던 요소를 삭제할 수 있다.

 

여러개의 자식 요소를 지우는 방법은 innerHtml을 사용하면 쉽게 가능하다.

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

다음은 container자식 요소를 전부 지운다.
하지만 innerHtml은 보안 의 문제를 갖고 있기 때문에 다른방법을 추천한다.

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

다음은 container의 첫번째 자식 요소를 지우는 코드이다.
반복문과 함께 사용하면 처음부터 끝을 지우는 코드도 만들 수 있다.

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

특정 클래스만 지울수도 있습니다.

const tweets = document.querySelectorAll('.tweet')
tweets.forEach(function(tweet){
    tweet.remove();
})
// or
for (let tweet of tweets){
    tweet.remove()
}
저작자표시 (새창열림)

'프론트엔드 > Codestates' 카테고리의 다른 글

[javaScript/Web] 유효성 검사를 하는 회원가입 페이지  (0) 2022.09.14
[JavaScript/Web] Dom에 대한 추가 공부  (0) 2022.09.13
[Javascript/Web] DOM의 기초  (0) 2022.09.13
[JavaScript] Javascript Koans  (0) 2022.09.13
[JavaScript] ES6 주요 문법 (spread/rest, 구조 분해)  (0) 2022.09.07
    '프론트엔드/Codestates' 카테고리의 다른 글
    • [javaScript/Web] 유효성 검사를 하는 회원가입 페이지
    • [JavaScript/Web] Dom에 대한 추가 공부
    • [Javascript/Web] DOM의 기초
    • [JavaScript] Javascript Koans
    LeeWang_31
    LeeWang_31
    이왕 할 거면 기분 좋게

    티스토리툴바