Vanilla JS #3
HTML in JS
JS 내부에서 HTML 태그들을 읽고, 바꾸고, 추가할 수 있다.
Grabing HTML
document 객체 : JS에서 HTML에 접근할 수 있는 객체.
HTML 요소를 가져 올 수 있는 방법은 3가지가 존재한다.
-
ID로 가져오기
- document.getElementById()
-
Class로 가져오기
- document.getElementByClassName()
-
Tag로 가져오기
- document.getElementByTagName()
그러나, element를 CSS 방식으로 가져올 수 있는 방법이 존재하는데, 바로 querySelector이다. 이 방식이 가장 선호된다.
querySelector(), querySelector() HTML 요소를 CSS 방식으로 검색하여 가져올 수 있다.
ex) document.getSelector(“.main h1”) 위 구문은 main 클래스를 가진 부모 아래의 h1 요소를 선택한다.
Event
Event Listener
이벤트를 처리하려면 이벤트를 담당하는 함수인 이벤트 리스너를 등록해주어야 한다.
버튼에 이벤트를 처리해보자.
const button = document.querySelector("button");
function handleButtonClick() {
console.log("button was clicked!");
}
button.addEventListener("click", handleButtonClick);
이와 같이 이벤트 리스너를 등록하려면
htmlTag.addEventListener("event",function)
이 양식을 지키면 된다.
다만, 함수를 실행하는 것이 아닌 위임하는 것이므로 함수를 실행시키면 안된다.
따라서 함수에 괄호를 씌우면 안된다는 것을 유의하자.
참고로 이벤트 리스너를 위와 같이 addEventListener를 이용하는 것이 아닌
htmlTag.onClick=function
이렇게 아예 이벤트 이름을 명시해서 사용할 수도 있는데, 선호에 따라 한가지를 통일해서 사용하면 된다.
Event with controlling CSS-class
이벤트 핸들러로 HTML 요소의 속성값을 직접 변경해 줄 수 있지만,
JS는 로직을 구현하는 놈이므로, 스타일을 바꾸는 것은 CSS에 위임하자.
즉, 다시 JS에서는 클래스를 추가해주는 것으로 끝내자.
[예시 코드]
/*CSS file*/
.clicked {
background-color: red;
}
//JS
const button = document.querySelector("button");
function handleButtonClick() {
button.classList.toggle("clicked");
}
button.addEventListener("click", handleButtonClick);
-
className()을 이용할 경우 클래스가 덮어 씌워지게 된다.
-> classList.remove() / classList.add()를 사용할 것
-
remove(), add()를 상황에 따라 써야 하므로 코드가 불필요하게 길어진다.
-> toggle()을 사용하자. 있으면 제거, 없으면 추가하는 똑똑한 함수이다.
참고
raw-value : 개발자가 마음대로 설정한 식별자. 하드 코딩하기 보다는 따로 상수로 만들어주고 사용하자.
이때 문자 상수는 전부 대문자를 사용하는 것이 관례이다.
//비추천 : 하드코딩
h1.className = "superClass";
h2.className = "superClass";
//h3.className="superClas" <- 이렇게 스펠링 실수할 수 있음 (에러 직접 찾아야함)
//추천 : 상수로 만들어사용 -> 실수 발생하면 에러 발생
const SUPPER_CLASS = "superClass";
h1.className = SUPER_CLASS;
h2.className = SUPER_CLASS;
//h3.className=SUPER_CLAS; <- 스펠링 실수하면 에러를 발생시켜준다.
Leave a comment