[엘리스 sw 엔지니어 트랙] 8일차 DOM과 이벤트

오경찬·2022년 4월 20일

수업 8일차

백준을 javascript로 풀기위해 vscode세팅을 엄청 했지만 실패하고 예제 txt파일로 입력을 받아 풀기로 했다... 아침부터 세팅하고 딥다이브 읽고 한다고 팔린 정신이 수업시간에도 안돌아와서 점심먹을때 까지는 고생했던거 같다.

이론

  • BOM : 문서 이외의 모든 것을 제어하기 위해 브라우저가 제공하는 추각 객체
    window.innerHeigth : 웹페이지의 높이
    window.innerWidth : 웹페이지의 너비
    window.alert() : 브라우저에 알림창 표시
    window.confirm() : 브라우저에 확인창 표시
    window.close() : 현재창 닫기
    window.open("URL", "이름", "설정") : 새로운 창 열기
    window.scrollTo() : 지정한 위치로 스크롤
    window.scrollBy() : 지정한 만큼 스크롤
    window.resizeTo() : 창 크기를 지정한 크기로 변경
    window.resizeBy() : 창 크기를 지정한 크기만큼 변경
    window.location.href : 전체 URl (history기록됨)
    window.location.pathname : URL 경로
    window.location.search : URL 중 ?부터 뒷부분
    window.location.hash : URL 중 #부터 뒷부분
    window.location.reload() : 현재 페이지 새로고침
    window.location.replace() : 현재 페이지 문서 교체(history 기록 안됨)
    window.history.length : 현재 창의 방문한 페이지 개수
    window.history.back() : 이전 페이지로 이동
    window.history.go(1) : 다음 페이지로 이동(음수면 이전 페이지)
    select 태그 : 여러 값 중 하나를 선택할 경우 사용
    input 태그 : 사용자로 부터 입력을 받기 위한 태그
    jQuery : javascript를 쉽게 활용할 수 있도록 도와주는 오픈소스 기반 라이브러리
    alert - 콘솔과 같이 테스트용 알림
    innerText : 눈에 보이는 요소만 넣음(공백이 많아도 하나로 취급)
    innerHTML : 눈에 보이지 않는 요소도 다 넣음(태그 포함)
    textContent : 눈에 보이지 않는 요소도 다 넣음(태그 제외)

실습

배경색 brown으로 변경하는 버튼과 새로고침, 그리고
history의 길이를 표시하고 page1,2,3으로 가는 버튼
뒤로가기 앞으로 가기 버튼을 가지고 있는 페이지를 작성

3페이지로 이동 된 모습 href를 눌러 옮겨가는 방식이라 history의 길이가 늘어난 모습 replace를 이용하면 새창을 여는 형식이라 길이가 늘어나지 않는다.

뒤로가기를 사용하고 배경색을 변경한 모습

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

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=
    , initial-scale=1.0" />
    <title>Document</title>
</head>

<body>
    <h1 id="page-name"></h1>

    <button id="bg-chang-btn">배경색 바꾸기</button>
    <button id="window-reload-btn">새로고침</button>
    <br /><br />
    <h2 id="history-length"></h2>
    <br /><br />

    <button class="move-page-href-btn" page="1">page1으로 이동 (href)</button>
    <button class="move-page-replace-btn" page="1">
      page1으로 이동 (replace)
    </button>
    <br />
    <button class="move-page-href-btn" page="2">page2으로 이동 (href)</button>
    <button class="move-page-replace-btn" page="2">
      page2으로 이동 (replace)
    </button>
    <br />
    <button class="move-page-href-btn" page="3">page3으로 이동 (href)</button>
    <button class="move-page-replace-btn" page="3">
      page3으로 이동 (replace)
    </button>
    <br />
    <br /><br />
    <button id="back-btn">뒤로가기 (back)</button>
    <button id="prev-go-btn">뒤로가기 (go)</button>
    <button id="next-go-btn">앞으로 가기 (go)</button>

    <select name="시도" id=""></select>
    <script src=" 4-20.js "></script>
</body>

</html>

page1,2,3 동일한 HTML 사용

Js

let pageName = window.document.getElementById("page-name");
let pathArr = window.location.pathname.split("/");
pageName.innerHTML = pathArr[pathArr.length - 1];
// console.log(pathArr[pathArr.length - 1]);

let bgChangBtn = window.document.getElementById("bg-chang-btn");
bgChangBtn.addEventListener("click", function() {
    let isOk = window.confirm(' 배경색을 바꾸시겠습니까? ');
    // boolean : true / false
    if (isOk) {
        document.querySelector("body").style.backgroundColor = "brown";
    }
});


let reLoadBtn = window.document.getElementById("window-reload-btn");
reLoadBtn.addEventListener("click", function() {

    window.location.reload();
});

// 히스토리 길이를 표시
let historyLen = window.document.getElementById("history-length");
historyLen.innerHTML = `${window.history.length}개 기록됨`;


let pageHrefBtns = window.document.getElementsByClassName("move-page-href-btn");
for (let i = 0; i < pageHrefBtns.length; i++) {
    pageHrefBtns[i].onclick = function() {
        let pageNum = pageHrefBtns[i].getAttribute("page");
        window.location.href = `page${pageNum}.html`;
    }
}



let pageReplaceBtns = window.document.getElementsByClassName("move-page-replace-btn");
for (let i = 0; i < pageReplaceBtns.length; i++) {
    pageReplaceBtns[i].onclick = function() {
        let pageNum = pageReplaceBtns[i].getAttribute("page");
        window.location.replace(`page${pageNum}.html`);
    }
}

let backBtn = window.document.getElementById("back-btn");
backBtn.onclick = function() {
    window.history.back();
}

let prevGoBtn = window.document.getElementById("prev-go-btn");
prevGoBtn.onclick = function() {
    window.history.go(-1);
}

let nextGoBtn = window.document.getElementById("next-go-btn");
nextGoBtn.onclick = function() {
    window.history.go(1);
}

Select 기본 예제

서울 select와 option값

부산 select와 option값

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <select id="city">
        <option value="">시/도 선택</option>
        <option value="1">서울특별시</option>
        <option value="2">부산광역시</option>
    </select>
    <select id="county">
        <option value="">시/군/구 선택</option>
        <!-- <option value="1">서울특별시</option>
        <option value="2">부산광역시</option> -->
    </select>


    <script src="4-20_2.js"></script>
</body>

</html>



JS

seoulCountyList = [
    "강동구",
    "강서구",
    "강남구",
    "강북구",
    "..."
];
//배열값에 넣어서 하나 씩 불러와서 값을 이용하는게 깔끔함

let citySelet = window.document.getElementById("city");
citySelet.addEventListener("change", function() {
    let countySelect = window.document.getElementById("county")

    let optionHtmlStr = '<option value="">시/군/구 선택</option>';

    if (this.value == 1) {
        for (let i = 0; i < seoulCountyList.length; i++) {
            optionHtmlStr += `<option value=\"${i+1}\">${seoulCountyList[i]}</option>`;
        }
        // optionHtmlStr += "<option value=\"2\">강서구</option>";
        // optionHtmlStr += "<option value=\"3\">강남구</option>";
        // optionHtmlStr += "<option value=\"4\">강북구</option>";
        // optionHtmlStr += "<option value=\"5\">...</option>";
    } else if (this.value == 2) {
        optionHtmlStr += "<option value=\"1\">진구</option>";
        optionHtmlStr += "<option value=\"2\">남구</option>";
        optionHtmlStr += "<option value=\"3\">동구</option>";
        optionHtmlStr += "<option value=\"4\">해운대구</option>";
        optionHtmlStr += "<option value=\"5\">...</option>";

    }

    countySelect.innerHTML = optionHtmlStr;
})
profile
코린이 입니당 :)

0개의 댓글