IT 관련/개발(Codecademy)

Javascript (onclick 등 다양한 속성 및 메소드)

Entkommen 2023. 1. 9.
728x90

Javascript(Dom 조작 )

.innerHTML

위 명령어를 사용하여 , 특성 요소의 내부를 바꿀 수있다.

document.querySelector('p');

위를 사용하여 CSS 선택자를 활용하여 요소에 접근할 수 있다

document.getElementById('bio').innerHTML = 'The description';

// Set first element of .student class as 'Not yet registered'

document.getElementsByClassName('student')[0].innerHTML = 'Not yet registered';

// Set second <li> tag as 'Cedric Diggory'

document.getElementsByTagName('li')[1].innerHTML = 'Cedric Diggory`;

예를들어 아래와 같은 HTML 원본의 h1 텍스트 ‘Top 5 Best Selling Costumes’를 다른 텍스트로 바꾸고 싶다면, querySelector와 innerHTML을 사용하면 된다 .

<html> 
 <head>
   <title>Popular Fantasy Searches</title>
 </head>
 
 <body>
   <h1 class="ranking">Top 5 Best Selling Costumes</h1>
   <ol>
     <li id="first">Harry Potter</li>
     <li id="second">Hermione Granger</li>
     <li class="slytherin" id="third">Lord Voldemort</li>
     <li class="slytherin" id="fourth">Draco Malfoy</li>
     <li id="fifth">Hagrid</li>
   </ol>
  
 </body>
 <script src="./main.js"></script>
</html>

아래를 사용하여 제목을 바꿀 수 있다. 내용을 변경할 때 innerHTML이 사용되는 것과, getElements로 시작하는 메소드에 인덱스가 붙어 구성요소 중 어떤 것을 선택했는지 지정하는 것을 주목하자

document.querySelector('h1').innerHTML = 'Most popular Harry potter characters';
document.querySelector('h1').innerHTML = 'Most popular Harry potter characters';

document.getElementById('fourth').innerHTML = 'Professor Snape'

document.getElementsByClassName('slytherin')[0].innerHTML = 'Salazar Slytherin'

document.getElementsByTagName('li')[0].innerHTML = 'Dobby'

document.getElementById('fourth').innerHTML = 'Professor Snape'

요소를 스타일 하기

다음 MDN 문서(링크)를 참고해서 JS에서 CSS 요소들의 이름이 하이픈(-)없이 어떻게 표시되는지를 먼저 참고하자.

바로 아래 예시처럼 요소에 해당하는 것을 불러와 변수에 담아서 다시 .style을 불러올 수도 있고

let blueElement = document.querySelector('.blue');
blueElement.style.backgroundColor = 'blue';

아래처럼 chaining해서 작성할 수도 있다.

document.querySelector('.blue').style.fontFamily = 'Roboto';

예제에서는 querySelector를 사용하라는데, 왜 getElementsbyClassName은 안써있지 하는 마음에 시도해보니 잘 된다.

document.getElementsByClassName('heading')[0].style.fontFamily='Roboto';

DOM 내부에서 Traverse(횡단, 이동) 하는법

.parentNode 라는 속성과 / .children 이라고 하는 속성을 잘 활용하면 특정 요소의 부모노드 혹은 자식노드들을 호출 할 수 있다. 예를 들어 document는 모든 노드들의 root node가 되믈 document.parentNode 는 null이 된다.

요소의 생성과 삽입

두 개의 메소드가 크게 새로 등장한다.

.createElement() 메소드

; 괄호 안에 오는 요소를 생성한다. 내용은 들어가지 않고 변수 안에 넣어 추가적으로 내용 및 아이디 등 여러 속성들을 할당할 수 있다.

.appendChild() 메소드

;위에서 할당된 변수를 괄호 안에 넣어 document 등 parentelement 뒤에 쓰여 그 안에 가장 마지막 childnode로 할당한다.

예시)

let paragraph = document.createElement('p');
//이렇게 변수를 생성해주고 

paragraph.id = 'info'; 
paragraph.innerHTML = 'The text inside the paragraph';

//위처럼 id와 내용을 넣어준다. 

document.body.appendChild(paragraph);
//이렇게 body에 마지막에 삽입할 수 있다. 

요소를 제거하기

.removeChild() 메소드를 사용하면 된다.

let paragraph = document.querySelector('p');
document.body.removeChild(paragraph);

제거하는 것이 아닌 숨기고 싶다면 .hidden 속성을 작성후 true 혹은 false 값을 반환하면 된다.

document.getElementById('sign').hidden = true;

클릭시 상호작용 적용하기

.onclick 속성을 사용하면 클릭시에 어떠한 상호작용이 일어날 지 함수를 할당 할 수 있다. 예시는 다음과 같다 .

let element = document.querySelector('button');
 
element.onclick = function() { 
  element.style.fontFamily = 'Roboto' 
};

위 처럼 익명함수로 바로 호출 할 수도 있지만 다음처럼 함수에 이름을 설정 후에 호출 할 수 도 있다.

let element = document.querySelector('button');
 
function turnRoboto() {
  element.style.fontFamily = 'Roboto' 
}
 
element.onclick = turnRoboto;
//괄호를 쓰지 않은 것에 주목 . 
//이것은 우리가 listener에게 전달하는 것이 함수 자체가 아니라 함수가 있는 주소를 전달하는 것임
//callback과 같은 개념 .  

요약 및 부족한 개념

우선 이번 챕터 정리하면서 .this 와 callback 의 개념을 다시 정비할 필요를 느꼈다.

이전에 배운것이고 활용을 잘 했다고 생각하는데 바로 까먹어버렸다.

요약은 다음과 같다.

  • The document  키워드는 DOM의 루트에 접근하게 해준다 .
  • .querySelector() 메소드를 사용하여 CSS셀렉터를 활용해 특정한 요소를 선택하는 것이 가능하다.
  • .getElementById() 를 이용하여 ID로 요소 하나를 찾아 반환할 수 있다.
  • .getElementsByClassName()   .getElementsByTagName() 들로 반환한 값은 어레이로 반환되고 인덱스를 사용해 그 어레이안에 들어간 요소들 중 하나를 뽑아 낼 수 있다.
  • .innerHTML   .style 를 활용해서 요소의 내용과 색상 등 스타일을 변경할 수 있다 .
  • 다음을 활용하여 요소를 생성, 추가, 제거 할 수 있다.  .createElement(),.appendChild()   .removeChild()
  • .onclick 속성은 클릭 이벤트 event 에 맞춰 다양한 상호작용을 DOM에 추가하게 해준다.
  • .children 자식요소들을 반환하고 ,  .parentNode 속성은 가장 가까운 부모요소를 반환한다.
728x90