appendChild(myLi)
마지막 자식 요소에 넣어준다.
insertBefore(span, sibling)
span을 자식(sibling) 전에 넣어줘라
textContent
const myBtn = document.querySelector("button"); const myP = document.querySelector("p"); const myInput = document.querySelector("input"); myBtn.addEventListener('click', function(){ myP.textContent = myInput.value; //입력한 값이 p 태그의 텍스트컨텐트로 할당이 됨. });
여기 있는 내용을 클릭하면 p 태그에 넣어주라.
value
메서드는 input
이라는 요소에서만 사용할 수 있다.
(값을 뽑아낼때!)
innerHTML
태그까지 적용되게 넣어줄 수 있다.
(텍스트만도 넣어줄 수있지만 그건 textContent를 쓰는게 더 효율적이다.)
innerHTML - mozilla 참고링크:
https://developer.mozilla.org/ko/docs/Web/API/Element/innerHTML#security_considerations
innerText
태그는 인식하지 않는다.
textContent와의 차이:
https://developer.mozilla.org/ko/docs/Web/API/HTMLElement/innerText#%EC%98%88%EC%A0%9C
textContent
는 공백 및 줄 바꿈과 같은 서식을 인식하고 반환해주고 마크업만 제거해서 반환해준다. (브라우저 호환성도 좋고, 텍스트 콘텐츠의 raw 값을 보여줘서 파싱이 빠르다.)
innerText
는 css가 랜더링 된다!textContent
랑 비슷해보이는데 공백을 인식하진 못한다.
(사람이 읽을 수 있는 요소만 처리한다.)
insertAdjacentHTML
innerHTML과 차이
insertAdjacentHTML
은 이미 사용중인 요소는 파싱하지 않는다. insertAdjacentHTML
을 쓰는게 innerHTML
보다 빠르다.insertAdjacentHTML - mozilla 참고링크:
https://developer.mozilla.org/ko/docs/Web/API/Element/insertAdjacentHTML
console.log(cont.firstElementChild); // 첫번째 자식 console.log(cont.lastElementChild); // 마지막 자식 console.log(cont.nextElementSibling); // 다음 형제요소 console.log(cont.previousSibling); // 이전 형제노드 console.log(cont.children); // 모든 직계자식 console.log(cont.parentElement); // 부모 요소
노드 : 요소, 주석, 텍스트컨텐츠, 줄바꿈 등등
이벤트 대상을 찾을 때 일어나는 현상 (이벤트를 발생시키는게 누구냐!)
클릭 스크롤 마우스 움직임 다 이벤트!
'캡처링 단계'
: 타겟을 찾아가는 상태. 윈도우부터 돔트리를 따라 내려간다.
이 때 모든 캡처링 이벤트 리스너를 실행시킨다.
찾으면, 그 때 캡처링 상태가 끝나고 다시 돔트라 따라 올라가면서 만나는
'버블링 단계'
: 모든 버블링 이벤트를 실행.
이렇게 이벤트 리스너가 차례대로 실행되는 것을 이벤트 전파
라고 한다.
window.addEventListener('click', () => { console.log("window capture!"); }, true); // true : 캡처링 단계의 이벤트가 발생하도록 합니다.
true를 넣으면 캡처링 단계에서 이벤트가 발생하고
안 넣으면 버블링 단계에서 이벤트가 발생한다.
target, currentTarget
target
: 이벤트가 발생한 진원지의 정보가 담겨 있다.
이벤트 리스너가 없는 요소의 이벤트가 발생했을 때도 그 요소에 접근할 수 있다.
이벤트를 main
에 달아도, 그 안에있는 버튼(이벤트의 진행지점)을 누르면, target
은 그 버튼이다.
currentTarget
: 이벤트리스너가 달려있는 그 곳.
리스너가 없어도 리스너가 있는 것처럼 사용할 수 있다.
this
이벤트가 연결된 노드를 참조한다.
<article class="parent"> <ol> <li><button class="btn-first" type="button">버튼1</button></li> <li><button type="button">버튼2</button></li> <li><button type="button">버튼3</button></li> </ol> </article> <script> const parent = document.querySelector('.parent'); parent.addEventListener('click', function (event) { console.log(this); }) </script>
어떤 버튼을 눌러도 article을 참조한다.
위의 currentTarget
과 유사하다.
주의
화살표함수 안에서 this는 상위(부모)스코프를 참조한다.
그래서 화살표 함수 안에 넣으면, 윈도우가 나온다.(전역공간에 있어서!)
아니 DOM의 개념은 나름 쉽다고 생각했는데, 실습을 하려고 하니까 너무 어려웠다. 근데 나만 어려운 것은 아니겠지! 그렇겠지..? 손코딩부터 열심히 하자! 많이 쓰고, 많이 쳐보면 손에 익겠지!
잘한점