document : 접근할 수 있는 HTML을 보여주는 객체
document.title : HTML에서 정한 head의 title을 보여준다.
document.title = 'test'를 통해 문서의 title이름 변경 가능
특정한 무언가를 가져오려면~
특정 HTML내용 변경!
자바스크립트로 HTML에 접근하기
document.getElementById("~"); : tag의 id명으로 내용을 가져올 수 있다.
const title = document.getElementById"title");
title.innerText = 'Got you!';
처럼 사용시 대상(element)을 정의해 가져와 줘야한다.
element.innerText : element 안에서 사용자에게 '보여지는 text 값'들만 가져오거나 설정 가능
적힌 text만 보이므로 태그를 이용하더라도 태그까지 text로 출력
element.innerHTML : element 안의 HTML이나 XML을 가져오거나
태그와 함께 입력하여 내용을 직접 설정 가능
태그 내용을 토대로 text를 꾸며 출력
element.className : 지정된 class값으로 대입하면 class 전체가 변경
하나의 클래스를 조작하고 싶을 대 사용
element.classList : node의 클래스를 다룰 수 있도록 제공되는 기능
하나의 클래스만 조작 가능
add, remove, contains, toggle 등의 함수 사용 가능
- 사용 방식 : element.classList.item(index); //class item 하나씩 선택
element.classList.add('이름'); //class 추가
element.classList.remove('이름'); //class 제거
element.classList.contains('이름'); //있으면 true, 없으면 flase
element.classList.toggle('이름'); //있으면 class 제거, 없으면 class 추가
(navbar 등을 나타났다 사라지게 할 수 있다.)
element.classList.repalce('이름'); //class 교체
getElemntById() : 하나의 값인 id를 통해 하나의 값을 반환
getElementsByClassName() : 많은 element를 가져올때 씀(array 반환)
getElementsTagName() : name을 할당 가능(array 반환)
querySelectior : 배열이 아닌 한가지만 가져올 수 있다.
element를 CSS방식으로 검색 가능 (사용법이 간단해 주로 사용)
ex) class이름이 hello인 자식 테그 h1을 가져오고 싶을 때
document.querySelector(".hello h1");
여러개의 같은 class이름이 있을 땐, 가장 첫번째 것을 가져온다.
모든 것을 가지고 오고 싶을 땐 querySelectiorAll을 사용
querySelector("#hello"); = getElementById("hello"); 이지만 querySelectior는 하위 요소를 따로 가져올 수 있다.
querySelector(".hello:first-child h1"); 같은 class 이름의 태그가 많을 땐, 이런식으로 자식 순서대로 불러올 수 있다.
console.dir(title); => object로 된걸 보여 준다.
title.style.color = "blue"; -> title의 style영역의 color를 적용해 글자 색상을 바꿔준다.
Events
click event (listen for cilck)
먼저 자바스크립트로 가져와 읽게 해주고 무엇을 했을 때 무엇이 발생하도록 event를 만들어주고
그 event를 listen하게 해준다.
cost title = document.querySelector("div.hello:first-child h1");
function handleTitleClick() {
console.log("title was clicked!");
title.style.color = "blue"; }
title.addEventListener("click", handleTitleClick); (title에 click 이벤트가 발생하면 함수를 실행)
console.dir(title)처럼 console.dir로 출력했을때 property들을 볼 수 있는데 그중 on이 앞에 붙은 것들이 event listener들이다.
콘솔 창에서 document.div를 처보면 body와 다르게 안나올 것이다.
-> body, head, title 이런것을은 중요하기 때문에 존재하는 것이고,
나머지 element들은 querySelector나 getElementById 등으로 찾아와야 한다.
}resize는 창의 크기에 따라 적용되는 리스너이다.
윈도우객체 즉, 창 전체에 작용할 것이고
그 창에서 복사가 되면 'copier now!'라는 경고창이 뜰 것이다.
Event CSS in JavaScript
를 좀더 깨끗하게 만들려면
그래서 색을 주는 것을 CSS로 주고 동적으로의 변화는 JavaScript로 준다면
CSS에서 id가 title인 h1태그를 기본 색을 blue로 바꾼뒤 .active로 바꿀색을 입력 후
자바스크립트로 이름이 active인 class를 생성하게 만들어 주면 된다.
그럼 처음 상태는 파란색인 상태이고 클릭시 class네임이 없는 상태니 class가 추가 되어
tomato색으로 바뀌고 다시 클릭 하면 class네임이 있는 상태이니 원래 상태인 blue색으로 돌아간다.
+ class명을 변수로 정의해 넣어 주면 JavaScript가 오류를 알려줘 보다 쉽게 고칠 수 있다.
그럼 전보다 덜 햇갈리게 사용 가능하다.
하지만 class가 이미 있는 상태로 시작된다면...?
이미 있는 class명을 cliked로 바꿔버리니 계속 추가해 줘야한다.
className은 이전에 있는 calss들은 상관하지 않고 모든것을 교체해버리고
classList는 class들을 목록으로 작업할 수 있게끔 허용해준다.
그중 contains는 우리가 명시한 class가 HTML element의 class에 포함되어 있는지 말해준다.
그러니 다른 class가 있더라도 그대로 두고 새class를 추가해 다룰 수 있도록 해준다.
이를 한번에 쉽게 해주는 함수가 있는데,,,
toggle함수는 class name이 존재하는지 확인을 해준다.
그리고 만약 존재하지 않는 다면 추가해 준다.
이는 지금 작성한 if함수의 내용과 같은 내용!!
그리고 toggle시엔 한번만 사용하므로 class name을 바로 적어주면 된다!
그러니 const로 정의 할 필요도 없닷
불을 껐다 크는 것처럼! 폰 화면 버튼을 누르는 것처럼! 작동 가능!
navbar사용시 썼던 함수~!
// 그냥 toggle자체를 알았던것 보다 배로 이해가 가는 듯
'[JavaScript] > [Nomad Coders]' 카테고리의 다른 글
#6 QUOTES AND BACKGROUND (0) | 2024.08.02 |
---|---|
#5 CLOCK (0) | 2024.08.02 |
#4 LOGIN (0) | 2024.08.01 |
Welcom To JavaScript (0) | 2024.07.25 |