자바스크립트 DOM 기능
github커밋
getElements~
: collection
이라는 유사배열 형태로 반환함. 배열 일부 메서드만 활용 가능getElementsByTagName
: 태그명으로 접근 -> 배열로 반환getElementsByClassName
: 클래스명으로 접근 -> 배열로 반환getElementById
: id로 접근 -> 하나의 객체로 반환querySelectorAll
: 해당되는 태그, 클래스 객체 전부 collection
으로 반환for (var i = 0; i < containers.length; i++) {
containers[i].style.backgroundColor = 'blue';
}
element.innerHTML
: element 안 내용물을 문자열 형태로 반환element.outerHTML
: element 자기 자신 포함한 내용물 문자열 형태 반환var header = document.querySelector('.masthead');
console.log(header.innerHTML);
console.log(header.outerHTML);
header.innerHTML = "<h1>Hello World</h1>";
textContent
: html에 작성된 텍스트에 접근 및 수정innerText
: css 속성 적용된 상태로 접근 및 수정var heading = document.querySelector('.masthead-heading');
console.log(heading.innerText); // IT'S NICE TO MEET YOU
console.log(heading.textContent); // It's Nice To Meet You
createElement()
: 만들 태그 종류를 인수로 넘겨준다. html 문서에 실제로 삽입하기 전까진 코드 상으로만 존재하는 태그가 된다.var h3Test = document.createElement('h3');
h3Test.textContent = 'Hello world';
appendChild()
: 부모 태그 안 마지막에 삽입var subHeading = document.querySelector('.masthead-subheading');
var heading = document.querySelector('.masthead-heading');
var btn = document.querySelector('.masthead .btn');
subHeading.appendChild(h3Test);
heading.appendChild(h3Test);
btn.appendChild(h3Test); // btn 안에만 태그 삽입됨
insertAdjacentHTML(position, text)
position
: 'beforebegin' 열림태그 전, 'afterbegin' 열림태그 후, 내용물 전, 'beforeend' 내용물 후, 닫힘태그 전, 'afterend' 닫힘태그 후text
: html 태그 포함해서 문자열로 전달var heading = document.querySelector('.masthead-heading');
var txt = "<h3>!!!!!!!!!!</h3>";
heading.insertAdjacentHTML('beforeend', txt);
parentElement
: 태그의 바로 위 부모 태그 반환var headContainer = document.querySelector('.masthead .container'); // 부모 지정
var heading = document.querySelector('.masthead-heading'); // 삭제할 태그
headContainer.removeChild(heading);
heading.parentElement.removeChild(heading);
heading.remove();
fisrtElementChild
: 부모태그의 여러 자식 요소 중 첫 번째 선택lastElementChild
: 부모태그의 여러 자식 요소 중 마지막 선택heading.style.color = 'red';
heading.style.backgroundColor = "pink";
heading.style.fontSize = '25px';
heading.style.cssText = "color: red; background-color: blue; font-size: 25px";
setAttribute('변경할 속성', '속성값')
heading.setAttribute("id", "heading-test");
document.querySelector('#heading-test').style.backgroundColor = "pink";
var heading = document.querySelector('.masthead-heading');
var headingClass = heading.className;
var headingArr = headingClass.split(' ');
console.log(headingClass); // masthead-heading text-uppercase
console.log(headingArr[1]);
heading.className = 'asthead-heading text-uppercase test';
heading.className += ' test';
DOMTokenList
라는 유사배열 형태로 가져옴classList.add()
: 새 클래스 추가classList.remove()
: 기존 클래스 삭제classList.toggle()
: 인수로 준 클래스가 이미 있으면 삭제, 없으면 생성heading.classList.add('test1', 'test2');
heading.classList.remove(headingClass[1]);
heading.classList.toggle('test1');
contains()
: 인수가 포함되어 있으면 true, 없으면 falseconsole.log(heading.classList.contains('text-uppercase')); // true
// 1. 별도 함수 사용
var heading = document.querySelector('.masthead-heading');
function test() {
console.log('click');
};
heading.addEventListener('click', test);
heading.removeEventListener('click', test);
// 2. 익명 함수 사용
heading.addEventListener('click', function (){
console.log('click');
});
removeEventListener
를 사용하기 위해서는 addEventListener
에서 사용한 콜백함수를 정확히 지정해서 삭제해야 하는데, 함수는 참조형 데이터타입이라 값이 같아도 주소값이 다르면 다른 객체로 취급된다. 따라서 별도 함수를 만들어 함수명만 전달하는 방식을 사용해야 한다.// 틀린 방법: add, remove의 콜백함수는 값은 같아도 주소값이 다름
heading.addEventListener('click', function (){
console.log('click');
});
heading.removeEventListener('click', function (){
console.log('click');
});
// 바른 방법
function test() {
console.log('click');
};
heading.addEventListener('click', test);
heading.removeEventListener('click', test);
var btn = document.querySelector('#btn');
btn.addEventListener('click', function(e) {
e.preventDefault();
console.log('hello world');
});
main.js:219 Uncaught TypeError: Cannot read property 'addEventListener' of null at main.js:219
에러 자주 발생함이전 실습에서 종종 썼던 내용들을 하나씩 정리할 수 있어서 도움이 되었다.