<<스터디 주제>>
JavaScript 리뷰
- DOM - Element 객체 추가, 삭제, 변경
- 이벤트처리 - DOM 조작
자바 기술면접 대비 리뷰
- JVM 구동원리 - 발표자 : PSH
<<스터디 내용>>
DOM(Document Object Model)
Element 객체 추가
- document.createElement(nodeName) : Element 객체를 생성하여 반환하는 메소드
- document.createTextNode(content) : Text 객체(텍스트 노드)를 생성하여 반환하는 메소드
- Node.appendChild(newNode) : Node 객체(Element 객체)에 마지막 자식 노드 객체로 추가하는 메소드
- document.body : body 태그를 Element 객체로 표현
- Node.attributeName : Node 객체(Element 객체)의 프로퍼티는 태그의 속성으로 표현 가능 ⇒ Node.attributeName=value
- Node.setAttribute(attributeName, attributeValue) : Node 객체(Element 객체)에 태그 속성값을 변경하는 메소드
- Node.getAttribute(attributeName) : Node 객체(Element 객체)의 태그 속성값을 반환
- Node.insertBefore(newElt, before) : 기존 Node 객체 전에 새로운 Node 객체를 삽입하는 메소드
Element 객체 수정
- Node.removeChild(oldNode) : Node 객체(Element 객체)의 자식 Node 객체를 삭제하는 메소드
- Node.parentElement : Node 객체(Element 객체)의 부모 Node 객체를 저장ㅈ한 프로퍼티
- Node.parentNode : Node 객체(Element 객체)의 부모 Element 객체를 저장한 프로퍼티
innerHTML
- Node.firstChild.nodeValue=”신메뉴” : Node 객체(텍스트 노드)의 태그내용 변경
- Node.replaceChild(newChild, oldChild) : Node 객체(Element 객체)의 기존 자식 Node 객체를 새로운 Node 객체로 변경하는 메소드
- Node.innerHTML : Node 객체(Element 객체)의 태그내용(HTML 포함)을 저장한 프로퍼티 ⇒ Node 객체의 태그내용을 변경하여 DOM Tree를 좀더 쉽게 추가,삭제,변경 가능
이벤트 처리
태그(Element 객체)에서 발생되는 이벤트는 자바스크립트를 사용하여 이벤트 처리
- 태그의 이벤트 속성의 속성값으로 이벤트 처리 명령(자바스크립트) 작성하여 이벤트 처리
- Element 객체의 이벤트 관련 요소에 이벤트 처리 함수를 저장하여 이벤트가 발생될 경우 이벤트 처리 함수가 자동 호출되어 이벤트 처리
this *****
이벤트 처리 함수에서 이벤트가 발생된 태그(Element 객체)를 표현하기 위한 키워드
<ul>
<li>메뉴-1</li>
<li>메뉴-2</li>
<li>메뉴-3</li>
</ul>
<script type="text/javascript">
document.getElementById("displayDiv").onclick=function() {
}
var liList=document.getElementsByTagName("li");
liList.item(0).onclick=function() {
//liList.item(0).style="color: orange;";
this.style="color: orange;";
}
for(i=0;i<liList.length;i++) {//i 변수에 3이 저장되면 반복문 종료
liList.item(i).onclick=function() {
//이벤트 처리 함수는 이벤트가 발생된 후에 호출되어 실행
// => 반복문 종료 후 이벤트 발생시 이벤트 처리 함수 호출
// => 이벤트 처리 함수에서는 Element 객체가 없으므로 에러 발생
//liList.item(i).style="color: orange;";//liList.item(3) >> null
this.style="color: orange;";
}
}
</script>
이벤트(Event)
기본 이벤트(Default Event)
태그 중에는 태그 속성에 의해 이벤트가 자동 처리되는 태그 존재 - a 태그, form 태그 등
document.getElementById("btn").onclick=function() {
location.href="<<a href=https://www.daum.net>https://www.daum.net</a>>";
}
document.getElementById("naver").onclick=function() {
event.preventDefault();
}
Event.preventDefault : 태그(Element) 객체의 기본 이벤트를 제거하는 메소드
이벤트 전달(Event Propagation)
- API 문서 참고(https://developer.mozilla.org/ko/docs/Learn/JavaScript/Building_blocks/Events)
캡처링 단계에서는:
- 브라우저는 요소의 가장 바깥쪽의 조상 ([](<https://developer.mozilla.org/ko/docs/Web/HTML/Element/html>))이 캡처링 단계에 대해 그것에 등록된 onclick 이벤트 핸들러가 있는지를 확인하기 위해 검사하고, 만약 그렇다면 실행합니다.
- 그리고서 <html> 내부에 있는 다음 요소로 이동하고 같은 것을 하고, 그리고서 그 다음 요소로 이동하고, 실제로 선택된 요소에 닿을 때까지 계속합니다.
버블링 단계에서는, 정확히 반대의 일이 일어납니다:
- 브라우저는 선택된 요소가 버블링 단계에 대해 그것에 등록된 onclick 이벤트 핸들러를 가지고 있는지 확인하기 위해 검사하고, 만약 그렇다면 실행합니다.
- 그리고서 그것은 바로 다음의 조상 요소로 이동하고 같은 일을 하고, 그리고서 그 다음 요소로 이동하고, <html> 요소에 닿을 때까지 계속합니다.

현대의 브라우저들은 기본으로 모든 이벤트 핸들러가 버블링으로 등록되어 있음!
이벤트 처리 함수 등록
Element.addEventListener(type, callback[, capture])
: Element 객체에서 발생된 이벤트에 대한 이벤트 처리함수를 등록하는 메소드 ⇒ Element 객체에서 발생된 이벤트에 대해 다수의 이벤트 처리 함수 등록 가능
<button type="button" onclick="eventHandleOne(); eventHandleTwo();">이벤트 버튼-1</button>
<button type="button" id="btn">이벤트 버튼-2</button>
<script type="text/javascript">
document.getElementById("btn").addEventListener("click", function() {
alert("첫번째 이벤트 처리 함수의 명령 실행");
}, false);
</script>
이벤트(Event) - DOM 조작
DHTML(Dynamic HTML) : 태그에서 이벤트가 발생될 경우 Element 객체를 조작하여 동적인 페이지 제공
<button type="button" id="addBtn">아이템 추가</button>
<div id="itemListDiv"></div>
<script type="text/javascript">
var count=0;
document.getElementById("addBtn").onclick=function() {
count++;
var newItem=document.createElement("div");//<div></div>
newItem.setAttribute("id", "item_"+count);//<div id="item_XXX"></div>
var html="아이템["+count+"] ";
html+="<button type='button' onclick='removeItem("+count+")'>삭제</button>";
newItem.innerHTML=html;//새로운 Element 객체의 태그내용 변경
//Element 객체에 새로운 Element 객체를 마지막 자식으로 추가
document.getElementById("itemListDiv").appendChild(newItem);
}
function removeItem(cnt) {
//alert(cnt);
var removeElement=document.getElementById("item_"+cnt);
document.getElementById("itemListDiv").removeChild(removeElement);
}
</script>
Form Event - 입력페이지
form 태그 : submit 이벤트가 발생되면 웹프로그램을 요청하여 사용자 입력값을 전달하는 태그
<body>
<form action="46_form_action.html" method="post" name="loginForm">
<script type="text/javascript">
loginForm.action="46_form_action.html";
loginForm.method="post";
loginForm.submit();
</script>
JVM 구동원리

'Web Dev' 카테고리의 다른 글
| 56일차 Study (1) | 2021.12.31 |
|---|---|
| 55일차 Study (0) | 2021.12.31 |
| 53일차 Study (0) | 2021.12.29 |
| 52일차 Study (1) | 2021.12.27 |
| 주말 개인 Study (2) | 2021.12.25 |