티스토리 뷰

혼공자바스크립트

[혼공스] 6주차

곰부해 2025. 2. 23. 01:00

벌써? 드디어? 마지막주차 🥹

 

아! 그리고… 족장님, 맞아요! 저희는 자매였습니다! ㅋㅋㅋㅋ
이름이랑 뒷번호 때문에 혹시 알아채실까 했는데… 결국 들통나버렸네요 🤣

제가 동생한테 같이 하자고 (거의 협박하듯이ㅎㅎ) 추천해서, 서로 체크해 주면서 열심히 공부했어요.
결론은 둘 다 100% 만족한 혼공단 시간이었습니다! 


아무튼, 마지막 주차 공부 시작해보겠습니다! 🚀

 

 

CH 07 문서 객체 모델 

 

7-1 문서 객체 조작하기 

 

문서 객체(Document Object): 웹 페이지의 요소들을 의미하며, HTML의 각 요소를 객체 형태로 표현한 것 

문서 객체 모델(DOM, Document Objects Model): 문서 객체를 조합해서 만든 전체적인 형태 

 

  • DOMContentLoaded 이벤트 

HTML 문서의 요소(DOM)가 모두 로드된 후에 자바스크립트를 실행하기 위해서 

 

HTML 코드를 자바스크립트로 조작하기 

    <script>
        document.addEventListener('DOMContentLoaded',() => {
            const h1=(text) => `<h1>${text}</h1>`
            document.body.innerHTML+=h1('DOMContentLoaded 이벤트 발생')
        })
    </script>
</head>
<body>
    
</body>

 

-DOM이 완전히 로드된 후에만 실행되므로, HTML 요소가 없어서 생기는 오류를 방지할 수 있음 

-동적으로 HTML을 추가할 때 유용하며, 특히 body 태그가 다 로드되기 전에 실행될 가능성이 있는 코드에서는 필수적! 

 

  • 문서 객체 가져오기 

-document.body

코드 사용하면 문서의 요소를 읽어들일 수 있음 

ex) document.head , document.body, document.title 

-document.querySelector(선택자), document.querySelectorAll(선택자) 

선택자 부분에는 CSS 선택자를 입력한다 .기본적인 선택자는 아래와 같다. 

이름 선택자 형태 설명
태그 선택자  태그 특정 태그를 가진 요소를 추출함
아이디 선택자  #아이디 특정 id속성을 가진 요소를 추출함 
클래스 선택자  .클래스 특정 class 속성을 가진 요소를 추출함
속성 선택자  [속성=값] 특정 속성 값을 갖고 있는 요소를 추출함
후손 선택자  선택자_A 선택자_B 선택자_A 아래에 있는 선택자_B를 선택함

 

    <script>
        document.addEventListener('DOMContentLoaded',() => {
            //요소를 읽어들인다. 
            const header=document.querySelector('h1')

            //텍스트와 스타일을 변경함 
            header.textContent='HEADERS'
            header.style.color='white'
            header.style.backgroundColor='black'
            header.style.padding='10px'
        })
    </script>
    </script>
</head>
<body>
    <h1></h1>
    
</body>

-실제 h1태그에는 내용을 입력하지 않았지만, 자바스크립트에서 문서 객체를 조작했으므로 출력됨. 

 

  • 글자 조작하기 

-문서객체.textContent : 입력된 문자열을 그대로 넣습니다. 

-문서객체.innerHTML: 입력된 문자열을 HTML 형식으로 넣습니다. 

    <script>
        document.addEventListener('DOMContentLoaded',() => {
            const a=document.querySelector('#a') //특정 아이디로 요소를 선택함 
            const b=document.querySelector('#b')

            a.textContent='<h1>textContent 속성</h1>'
            b.innerHTML='<h1>innerHTML 속성</h1>'       
        })
    </script>
    </script>
</head>
<body>
   <div id="a"></div>
   <div id="b"></div>
   
</body>

textContent 속성의 경우는 글자가 그대로 들어갔지만, innerHTML속성은 h1요소로 변환해서 들어간다. 

  • 속성 조작하기 

-문서객체.setAttribute(속성이름, 값): 특정 속성에 값을 지정함 

-문서객체.getAttribute(속성이름) : 특정 속성을 추출함 

  • 스타일 조작하기 

문서 객체의 스타일을 조작할 때는 style 속성을 사용하며, 내부에는 CSS에서 지정할 수 있는 다양한 스타일 속성이 포함된다.

다만, 자바스크립트에서는 - 기호를 식별자에 사용할 수 없기 때문에 CSS 속성과 표기 방식이 약간 다르다. 두 단어 이상의 속성은 - 기호를 제거하고, 뒤따르는 알파벳을 대문자로 변환하는 캐멀 케이스(Camel Case) 방식으로 작성해야 한다.

Ex) h1.style.backgroundColor = "blue"; // CSS의 background-color → backgroundColor 

    <script>
        document.addEventListener('DOMContentLoaded',() => {
            const divs=document.querySelectorAll('body>div')

            divs.forEach((div,index)=>{
                console.log(div,index)
                const val=index * 10
                div.style.height=`10px`
                div.style.backgroundColor=`rgba(${val},${val},${val})`
            })
          
        })
    </script>
   

    </script>
</head>
<body>
   <div></div><div></div><div></div><div></div><div></div><div></div>
   <div></div><div></div><div></div><div></div><div></div><div></div>
   <div></div><div></div><div></div><div></div><div></div><div></div>
   <div></div><div></div><div></div><div></div><div><div><div></div>
   


</body>

<결과> 

 

div 태그를 조작해서 검은색에서 흰색으로 변화하는 그레이디언트를 만드는 코드

  • 문서 객체 생성하기 

-document.createElement(문서 객체 이름)

위 메서드를 사용하면 새로운 문서 객체를 생성할 수 있다. 

하지만 생성된 객체가 자동으로 문서에 추가되는 것은 아니다. 어디에 배치할지를 지정해야 한다. 

 

-문서 구조와 트리(Tree) 개념 

HTML 문서는 계층 구조를 가지며, 이를 트리(tree)라고 한다. 

상위 요소를 부모(Parent), 하위 요소를 자식(Child)이라고 부른다. 

 

-요소 추가하기 

부모객체.appendChild(자식객체);

부모 요소의 하위에 새로운 자식 요소를 추가할 때 사용 /

    <script>
        document.addEventListener('DOMContentLoaded',() => {
            //문서 객체 생성하기 
            const header=document.createElement('h1')

            //생성된 태그 조작하기 
            header.textContent='문서 객체 동적으로 생성하기'
            header.setAttribute('data-custom','사용자 정의 속성')
            header.style.color='white'
            header.style.background='black'

            //h1 태그를 body 태그 아래에 추가하기 
            document.body.appendChild(header)

          
        })
    </script>
    </script>
</head>
<body>
</body>

코드를 실행하면 h1태그를 출력함. 

 

  • 문서 객체 이동하기 

appendChild() 메소드는 문서 객체를 이동할 때도 사용할 수 있다. 문서 객체의 부모는 언제나 하나여야 한다. 따라서 문서 객체를 다른 문서 객체에 추가하면 문서 객체가 이동한다. 

 

const parent1 = document.getElementById("parent1");
const parent2 = document.getElementById("parent2");
const child = document.getElementById("child");

// child를 parent2로 이동
parent2.appendChild(child);

 

  • 문서 객체 제거하기 

-부모 객체.removeChild(자식 객체) 

-문서 객체.parentNode.removeChild(문서 객체) 

  • 이벤트 설정하기 

- 문서 객체.addEventListener(이벤트 이름, 콜백 함수) 

addEventListener() 메서드는 특정 이벤트가 발생했을 때 실행할 콜백 함수를 지정하는 방법이다.

이벤트 이름은 발생할 이벤트 종류(예: click, keydown, mouseover 등)이며, 콜백 함수는 이벤트 발생 시 실행될 함수이다

 

const button = document.getElementById("myButton");

button.addEventListener("click", () => {
    alert("버튼이 클릭되었습니다!");
});

 

위 예제에서 button 요소에 click 이벤트가 발생하면 알림창이 뜨게 된다. 

 

 

7-2 이벤트 활용 

 

  • 키보드 이벤트 

keydown : 키가 눌릴 때 실행됨, 키보드를 꾹 누르고 있을 떄도, 입력될 때도 실행됨 

keypress: 키가 입력되었을 때 실행됨, 하지만 웹 브라우저에 따라서 아시아권의 문자를 제대로 처리하지 못하는 문제가 있음 

keyup: 키보드에서 키가 떨어질 때 실행됨 

  • 이벤트 발생 객체 
    <script>
        document.addEventListener('DOMContentLoaded',() => {
            const textarea=document.querySelector('textarea')
            const h1=document.querySelector('h1')

            textarea.addEventListener('keyup',(event)=>{
                const length=textarea.value.length
                h1.textContent=`글자 수: ${length}`
            })
        })
    </script>
    </script>
</head>
<body>
    <h1></h1>
    <textarea></textarea>
</body>

실행결과

  • 글자 입력 양식 이벤트

code : 입력한 키 

keyCode : 입력한 키를 나타내는 숫자 

altKey: Alt 키를 눌렀는지 

ctrlKey: Ctrl 키를 눌렀는지 

shiftkey: Shift키를 눌렀는지 

 

ex) 기본 select 태그 

    <script>
        document.addEventListener('DOMContentLoaded',() => {
           const select=document.querySelector('select')
           const p=document.querySelector('p')

           select.addEventListener('change',(event) => {
            const options=event.currentTarget.options
            const index=event.currentTarget.options.selectedIndex 

            p.textContent=`선택: ${options[index].textContent}`
           })
          
        })
    </script>
    </script>
</head>
<body>
    <select>
        <option>떡볶이</option>
        <option>순대</option>
        <option>오뎅</option>
        <option>튀김</option>
    </select>
    <p> 선택: 떡볶이</p>
    
</body>

 

처음에 떡복이가 초기값으로 지정되고, 드롭다운 목록을 선택했을 때 값이 바뀐다.

  • 기본 이벤트 막기 

기본 이벤트: 이벤트가 발생했을 때 웹 브라우저가 기본적으로 처리해주는 것 

* 인터넷에서 이미지 불펌방지 등을 구현할 때 사용하는 코드임 

 

-event 객체의 preventDefault() 메소드 사용 

 

    <script>
        document.addEventListener('DOMContentLoaded',() => {
           let status=false

           const checkbox=document.querySelector('input')
           checkbox.addEventListener('change',(event)=>{
            status=event.currentTarget.checked
           })
           const link=document.querySelector('a')
           link.addEventListener('click',(event)=>{
            if(!status){
                event.preventDefault()
            }
           })
        })
    </script>
</head>
<body>
    <input type="checkbox">
    <span>링크 활성화</span>
    <br>
    <a href="=http://hanbit.co.kr">한빛미디어</a>

</body>

체크박스가 체크되어 있는 상태에서만 링크가 반응하고 체크가 해제되어 있는 상태에서는 링크를 클릭해도 아무 반응이 없다.

 

<기본숙제> 

p.315의 <직접 해보는 손코딩>을 실행한 후 출력되는 고양이 이미지 캡쳐하기 

 

    <script>
        document.addEventListener('DOMContentLoaded',()=>{
            const rects=document.querySelectorAll('.rect')

            rects.forEach((rect,index)=>{
                const width=400
                const src = `http://placekitten.com/${width}/250`;
                rect.setAttribute('src',src)
                
            })
        })
    </script>
</head>
<body>
   <img class="rect">
   <img class="rect">
   <img class="rect">
   <img class="rect">

    
</body>

 

무슨 이유때문인지 고양이 이미지가 안보여 캡쳐하지 못했습니당 흑 ㅠ

 

<추가숙제> 

p.352 누적 예제를 활용하여 본인의 할 일 목록을 만들어 캡쳐하기 

 

 

교재 참고하면서 만든것 !!

'혼공자바스크립트' 카테고리의 다른 글

혼공단 회고록  (0) 2025.02.23
[혼공스] 5주차  (0) 2025.02.16
[혼공스] 4주차  (0) 2025.02.09
[혼공스] 3주차  (0) 2025.01.26
[혼공스] 2주차  (0) 2025.01.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
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 31
글 보관함