document.getElementById()
라는 내제된 객체 document
에 getElementById()
라는 메소드를 사용해줘야 함.
const myTag = document.getElementById('내 아이디 이름')
document.getElementsByClassName('내 클래스 이름')
라는 내제된 객체 document
에 getElementsByClassName()
라는 메소드를 사용해줘야 함.
const myTags = document.getElementsByClassName('내 클래스 이름')
console.log(myTags[0])
)HTMLColection []
(비어있는 배열형태)가 출력됨.querySelector()
)document.querySelector('#myNumber')
document.getElementById('myNumber')
document.querySelector('.color-btn')
document.getElementsByClassName('color-btn')[0]
document.querySelectorAll('.color-btn')
→ Nodelist Nodelist 로 출력됨document.getElementsByClassName('color-btn')
→ HTMLColection 로 출력됨
안에 들어가는 내용은 모두 같음.
querySelector
을 조금 더 선호함.document.querySelectorAll('li')
같이 태그를 선택해도 본문의 li
태그들이 담긴 유사 배열을 리턴할 수 있음.console.log(document.querySelector('#list li'));
이렇게 css에서 처럼 부모요소 자식요소 한번에 설정할 수도 있음const btn = document.querySelector('#myBtn');
// 이벤트 핸들링
btn.onclick = function() { // 이벤트 핸들러(Event Handler)
console.log('Hello!');
};
btn이라는 변수에 onclick 프로퍼티를 할당해주고, 거기에 특정 함수를 할당해주는 방식.
console(window)
해보면 아주 많은 프로퍼티들 확인할 수 있고, console(window.innerWidth);
이런 식으로 사용도 가능함.console
같은 객체도 이러한 전역객체 중 하나라서 원래는 window.console.log()
이런 식으로 사용해야 하지만 윈도우 객체의 경우 생략이 가능함.document
의 타입은 object
이지만, console.log(document)
로 출력하면 html 태그 형태로 출력됨. 따라서 각 객체 형태의 프로퍼티들을 확인하고 싶으면 console.dir(document)
로 작성const myTag = document.querySelector('#list-1');
console.log(myTag);
// 형제 요소 노드
console.log(myTag.previousElementSibling);
console.log(myTag.nextElementSibling);
// 부모 요소 노드
console.log(myTag.parentElement);
// 자식 요소 노드
console.log(myTag.children[1]);
console.log(myTag.firstElementChild);
console.log(myTag.lastElementChild);
HTML 속성 중 요소 노드의 프로퍼티로 생성되지는 않음.
예를들어 ol 태그에 href 태그를 추가하는 건 HTML표준이 아님. 이렇 경우 비표준 속성에 접근할 수 있는 방법이 필요함.
// elem.getAttribute('속성'): 속성 접근하기
console.log(item.getAttribute('class'));
// elem.setAttribute('속성', '값'): 속성 추가(수정)하기
tomorrow.setAttribute('class', 'list');
// elem.removeAttribute('속성'): 속성 제거하기
tomorrow.removeAttribute('class');
표준, 비표준 속성에 모두 접근 가능.
Element.addEventListener('type', 'handler')
Element.removeEventListner('type', 'handler')
웹페이지에서 이벤트가 발생하면 관련된 정보를 담은 이벤트 객체가 만들어지고 이벤트 핸들러의 첫번째 파라미터로 전달됨.
이벤트 객체는 이벤트 종류마다 가지고 있는 프로퍼티가 다름
// 이벤트 객체 (Event Object)
const myInput = document.querySelector('#myInput');
const myBtn = document.querySelector('#myBtn');
function printEvent(event) {
console.log(event);
// 이렇게 하면 첫번째 파라미터인 EVENT에 담긴 이벤트 정보를 프로퍼티 형태로 확인할 수 있음
// 해당 정보를 콘솔로 확인하면서 아래같이 필요한 정보 쓰면 됨.
event.target.style.color = 'red';
}
myInput.addEventListener('keydown', printEvent);
myBtn.addEventListener('click', printEvent);
event.stopPropagation()
(아무런 값도 전달할 필요 x)✅ DOM 이벤트에서 정의하는 이벤트 흐름 3가지
1. 캡처링 단계: 이벤트가 하위 요소로 전파되는 단계
2. 타깃 단계: 이벤트가 실제 타깃 요소에 전달되는 단계
3. 버블링 단계: 이벤트가 상위 요소로 전파되는 단계
원래는 캡쳐링 단계에서는 이벤트를 발생시키지 않지만, 특수한 경우 캡쳐링 단계에서도 이벤트를 발생시킬 수 있음.
→ addEventListener
에 세번째 프로퍼티에 true
또는 { capture:true }
를 전달
for (let elem of document.querySelectorAll('*')) {
elem.addEventListener("click", e => alert(캡쳐링 단계: ${elem.tagName}), true);
elem.addEventListener("click", e => alert(버블링 단계: ${elem.tagName}));
}
if(e.target.tagName === ‘LI’)
, **if(e.target.classList.contains(’item’)**
등등 if문 사용하면 쉬움)브라우저에는 각 태그별 혹은 상황별로 기본적으로 약속된 동작들을 가지고 있음.
태그마다 지정된 브라우저 기본 동작을 지우고 싶다면? (예를 들면 마우스 우클릭 방지)
preventDefault()
→파라미터로 아무런 값도 전달하지 않고 그냥 소괄호 만으로 메소드 호출
(하지만 각 HTML 태그들이 가지고 있는 고유한 역할과 의미를 훼손하게 될 수도 있기 때문에 꼭 필요한 경우에만 주의해서 사용해야 함)