-> 이처럼 똑같은 기능을 가지는 컬렉션이더라도, 내부적으로 데이터를 활용하는 방법이 다르기 때문에 여러 형태의 컬렉션이 존재하게 된다.
Object obj = 3;
Object obj = 3;
해당 코드가 내부적으로 다음 코드와 같이 바뀌게 된다. Object obj = new Integer(3);
int x = (int)obj; // box에 담겨진 값을 unboxing해서 x라는 값 변수에 담기
System.out.println(x);
<%
MemberService memberService = new MemberService();
List<Member> list = memberService.getList(); // Generic 사용해 Member 자료형의 list 가변길이 배열 가져오기
%>
<tbody>
<% for(Member m : list) {%>
<tr>
<td class="w-1"><%=m.getId()%></td> // 가변길이 배열을 사용해 데이터 출력하기
<td class="truncate text-align-left"><a href=""><%=m.getNickName()%></a></td>
<td class="w-2">newlec</td>
<td class="w-2">2020-12-12</td>
<td class="w-1">1351</td>
</tr>
<% }%>
</tbody>
menuButton.onclick = function(e) {
e.preventDefault(); // a 태그 클릭 시 페이지가 새로고침되는 기본 행위를 막기
console.log("test");
}
window.addEventListener("load", function() {
var header = document.querySelector("#header");
var menuButton = header.querySelector(".icon-menu");
menuButton.onclick = function(e) { // 햄버거 버튼 클릭
// 1. div 태그를 생성해 전체를 가리는 스크린을 만든다.
var screen = document.createElement("div");
screen.style.position = "fixed"; /*absolute가 아닌 fixed로 변경*/
screen.style.left = "0px";
screen.style.top = "0px";
screen.style.width = "100%";
screen.style.height = "100%";
screen.style.backgroundColor = "black";
screen.style.opacity = 0;
screen.style.transition = "2s"; /*2초 동안 바뀜*/
setTimeout(function() { /*setTimeout을 하지 않았을 때는 opacity = 0 다음에 opacity = 0.7이 덮어씌워져서 적용됨*/
/*opacity = 0과 opacity = 0.7이 동시에 적용되지 않게 하기*/
screen.style.opacity = 0.7;
}, 0);
document.body.append(screen);
}
});
Node 객체는 Node 간의 관계 정보를 담고 있는 일련의 API를 가지고 있다.
-> 위 노드 관계 API는 각 노드 사이의 빈 공백, 주석, 텍스트 등이 모두 노드로 인식된다.
-> 위 API는 엘리먼트만을 대상으로 인식된다.
HTML
<section id="ex7">
<style>
.d-none {
display: none;
}
#ex7 .item>div:first-child {
border: 1px solid #e9e9e9;
padding: 5px 10px;
font-weight: bold;
}
#ex7 .item>div:last-child {
min-height: 100px;
}
</style>
<h1>아코디언 예제 - 노드 순회하기</h1>
<div class="accordion">
<div class="item">
<div class="title">title1</div>
<div class="d-none">content1</div>
</div>
<div class="item">
<div class="title">title2</div>
<div class="d-none">content2</div>
</div>
<div class="item">
<div class="title">title3</div>
<div class="d-none">content3</div>
</div>
</div>
</section>
JavaScript
window.addEventListener("load", function() {
var section = document.querySelector("#ex7");
var accordion = section.querySelector(".accordion");
accordion.onclick = function(e) { // 이벤트 버블링
// 1. title이 아니면 return
if(!e.target.classList.contains("title")) // title을 선택하지 않으면 아무런 동작이 실행되지 않음
return;
// 2. target 동생의 d-none toggle
selected = e.target;
selected.nextElementSibling.classList.toggle("d-none"); // 선택한 element 다음 형제의 classList 중 "d-none"이 toggle 되게 하기
}
});
HTML
<section id="ex8">
<style>
#ex8 .product {
box-shadow: 3px 5px 6px #000000;
padding: 10px;
}
#ex8 .item {
height: 30px;
}
</style>
<h1>상품목록 관리 - 노드 순회하기</h1>
<div class="product">
<div class="item">
<span>상품명1</span>
<input type="text" value="0">
<button class="up">위</button>
<button class="down">아래</button>
<button class="current">선택</button>
</div>
<div class="item">
<span>상품명2</span>
<input type="text" value="0">
<button class="up">위</button>
<button class="down">아래</button>
<button class="current">선택</button>
</div>
<div class="item">
<span>상품명3</span>
<input type="text" value="0">
<button class="up">위</button>
<button class="down">아래</button>
<button class="current">선택</button>
</div>
<div class="item">
<span>상품명4</span>
<input type="text" value="0">
<button class="up">위</button>
<button class="down">아래</button>
<button class="current">선택</button>
</div>
</div>
</section>
JavaScript
window.addEventListener("load", function() {
var section = document.querySelector("#ex8");
var product = section.querySelector(".product");
var count = 0;
product.onclick = function(e) {
var item = e.target;
if(!item.classList.contains("up") && // 위, 아래, 선택 버튼을 제외한 부분이 클릭되면 아무런 동작이 실행되지 않음
!item.classList.contains("down") &&
!item.classList.contains("current"))
return;
if(item.classList.contains("up")) {
var input = item.parentNode.querySelector("input");
input.value = parseInt(input.value) + 1; // 위 버튼 클릭 시 input.value 숫자가 +1 됨
} else if(item.classList.contains("down")) {
var input = item.parentNode.querySelector("input");
input.value = parseInt(input.value) - 1; // 아래 버튼 클릭 시 input.value 숫자가 -1 됨
} else if(item.classList.contains("current")) {
item.parentElement.style.borderStyle = "dotted"; // 선택 버튼 클릭 시 선택 버튼이 위치하는 부모 엘리먼트 상자의 border가 점섬으로 변경됨
}
}
});