Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 개발일기
- 실행컨텍스트란
- 실행컨텍스트 동작과정
- 실행컨텍스트 실행과정
- 영어
- 객체
- 알고리즘
- 로컬상태
- .current
- npm 에러
- 그래머인유즈
- state hook
- 실행컨텍스트자바스크립트
- 노마드코더
- Mini Node Server
- 영어공부
- css
- .env
- 개발공부
- CLI
- 고차함수
- CORS
- 실행컨텍스트 면접
- useRef역할
- 실행컨텍스트콜스택
- Block
- 실행컨텍스트스택
- html
- styled-component
- 전역상태
Archives
- Today
- Total
오늘도 삽질중
DOM(돔이란?, console.dir, 돔 메소드 연습: 간단 todo-list, 간단 유효성검사) 본문
<목차>
- DOM이란?
- HTML에 JavaScript 적용하기
- DOM구조를 조회
- 돔 메소드 연습 CRUD(create , read ,update, delete) (ex 간단 투두리스트, 유효성검사)
DOM (Document Object Model)
-HTML요소를 Object처럼 조작할 수 있는 모델이다. 즉 자바스크립트를 이용하면 DOM으로 HTML을 조작할 수 있다.
(HTML을 조작한다? DOM을 위해 웹 개발자들이 HTML의 아주 작은 부분까지 접근할 수 있는 구조를 만들었다. 이렇게 만들어진 구조를 이용해 HTML로 구성된 웹 페이지를 동적으로 움직이게 만들수 있다.)
-자바스크립트는 다양한 일을 할 수 있지만, 웹 페이지를 제어하기 위한 목적으로 오랜기간 사용되었다.
HTML에 JavaScript 적용하기
HTML에 JavaScript를 적용하기 위해서는 <script>태그를 이용한다. 이 태그는 <body>태그가 끝나기 전에 삽입한다.
DOM구조를 조회
DOM구조를 조회할 때에는 console.dir이 유용한다. console.dir은 console.log와 달리 DOM을 객체의 모습으로 출력한다.
CRUD(create , read ,update, delete)
-document 객체를 통해서 HTML 엘리먼트를 만들고(CREATE), 조회하고(READ), 갱신하고(UPDATE), 삭제(DELETE)한다.
DOM의 여러 메소드들을 간단한 todolist, 유효성검사를 통해 연습
- createElement - CREATE
- querySelector, querySelectorAll - READ
- textContent, id, classList, setAttribute - UPDATE
- remove, removeChild, innerHTML = "" , textContent = "" - DELETE
- appendChild - APPEND
돔 연습: Todolist
<body>
<div class = "todoName">To Do List</div>
<form class = 'input_form'>
<input type ="text" placeholder = "write here">
</form>
<ul class = 'input_list'>
</ul>
<script src = "newTodo.js"></script>
</body>
const todoName = document.querySelector('.todoName')
const inputForm = document.querySelector('.input_form');
const inputWrite = document.querySelector('.input_form input');
const inputList = document.querySelector('.input_list');
const body = document.querySelector('body')
body.style.background = "teal";
// 만약에 inputWrite에 입력을 한다면
// 예를들어 inputWrite에 공부하기라고 치고 엔터를 누른다면(submit)
// inputList에 inputWrite.value에 이름이 기재가 된다.
inputForm.onsubmit = function (event) {
const li = document.createElement('li')
const span = document.createElement('span')
const button = document.createElement('button')
const button2 = document.createElement('button')
console.log('클릭확인');
event.preventDefault();
inputList.appendChild(li);
li.appendChild(span);
li.appendChild(button);
li.appendChild(button2);
button.innerHTML = '✔️';
button.style.margin = '10px';
button2.textContent = '❌ ';
span.textContent = inputWrite.value;
button.addEventListener("click" , function() {
span.style.textDecoration = "line-through";
span.style.textDecorationColor = "red";
})
button2.addEventListener("click", function() {
li.remove();
})
}
button:hover{
background-color: blueviolet;
}
돔 연습: 유효성 검사
<body>
<h1>회원가입</h1>
<fieldset>
<label>아이디</label>
<input type = "text" id = "username">
<div class = 'failure-message hide'>아이디는 네 글자 이상이어야 합니다.</div>
<div class = 'success-message hide'>사용할 수 있는 아이디입니다. </div>
</fieldset>
<fieldset>
<label>비밀번호</label>
<input id = 'password' type = "password">
</fieldset>
<fieldset>
<label>비밀번호 확인</label>
<input id = 'password-retype' type = "password">
<div class = 'mismatch-message hide'> 비밀번호가 일치하지 않습니다.</div>
</fieldset>
<fieldset>
<button class = "button">회원가입</button>
</fieldset>
<script src="script.js"></script>
</body>
let elFailureMessage = document.querySelector('.failure-message');
let elSuccessMessage = document.querySelector('.success-message');
let elInputUsername = document.querySelector('#username');
let password1 = document.querySelector('#password');
let password2 = document.querySelector('#password-retype');
let misMatch = document.querySelector('.mismatch-message');
elInputUsername.onkeyup = function() {
if (isMoreThan4Length(elInputUsername.value)) {
elSuccessMessage.classList.remove('hide');
elFailureMessage.classList.add('hide');
} else {
elSuccessMessage.classList.add('hide');
elFailureMessage.classList.remove('hide');
}
}
function isMoreThan4Length(value) {
return value.length >= 4
}
password2.onkeyup = function() {
if (isMatch(password1.value, password2.value)) {
misMatch.classList.add('hide');
}else {
misMatch.classList.remove('hide');
}
}
function isMatch (a, b) {
return a === b
}
body{
background-color: coral;
}
.hide {
display: none;
}
Comments