JavaScript 기초/ 실습 - (실습) 유용한 JS 기능 구현하기 1

중간 자리가 빈 다면, 크기가 줄어 듬
데이터가 늘어났다 줄었다가 가능, 메모리가 동적으로 늘었다 줄었다 가능
성질의 차이는 있지만, 자바스크립트에서는 배열이라고 부른다.




원하는 위치의 요소를 삭제/추가하는 splice( ) 함수
원하는 위치의 요소들을 추출하는 slice( ) 함수

실습1. 배열에 있는 모든 요소를 더한 결과를 배열의 끝에 추가
for문, push 활용
var numbers = [2, 4, 6, 8, 10];
var sum = 0; //합계를 저장할 변수 선언
for (var i=0; i < numbers.length; i++){
sum = sum + numbers[i]; // sum += numbers[i]
}
numbers.push(sum);
showArray(numbers);
function showArray(arr) {
var str = "<table><tr>";
for (var i=0; i<arr.length; i++) {
str += "<td>" + arr[i] + "</td>";
}
str += "</tr></table>";
document.write(str);
}

실습2. 좋은 글귀를 배열에 저장해두고 배열에 있는 내용 중 하나를 무작위로 화면에 표시
Math.floor, Math.random() 활용
Math.floor(버림)/
quotes.length(10) - 확장 고려, 변화가 예상되면 리터널보다는 length활용하는 것이 좋음
새로고침하면 계속 바뀜
// 배열에 추가할 글귀 목록
// 배열이름: quotes
// 랜덤표시: Math.floor, Math.random() 활용
var quotes = ["당신은 지금도 최고고, 이전에도 최고였으며 앞으로도 최고일 것입니다.",
"성공하는 사람은 실패하는데 익숙한 사람이다.",
"후회를 최대한 이용하라. 깊이 후회한다는 것은 새로운 삶은 산다는 것이다.",
"가짜 친구는 소문을 믿고 진짜 친구는 나를 믿는다.",
"성공이라는 못을 박으려면 끈질김이라는 망치가 필요하다.",
"인생이란 결코 공평하지 않다. 이 사실에 익숙해져라.",
"'언젠가'라는 날은 영원히 오지 않는다.",
"문제점을 찾지 말고 해결책을 찾으라.",
"착한 일은 작다 해서 아니하지 말고, 악한 일은 작다 해도 하지 말라.",
"자존심은 어리석은 자의 소유물이다"];
var index = Math.floor(Math.random() * quotes.length ); // 확장 고려하여 quotes.length
document.write("<p>"" + quotes[index] + ""</p>")

실습3. 여행 준비물 점검 목록
html파일
<div id="wrapper">
<h2>여행 준비물 점검 목록</h2>
<form>
<input type="text" id="item" autofocus="true">
<button type="button" id="add" class="addBtn">추가</button>
</form>
<div id="itemList"></div>
</div>
<script src="./js/checklist.js"></script>
자바스크립트 구성
1. 물건들이 들어갈 배열 만들기
2. 이벤트 만들기
3. 챙길 물건을 배열에 추가 - 텍스트 필드 사용
4. 추가한 물건을 목록 형태로 표시 - for문
5. x를 누르면 삭제하기
// 1. 배열 만들기
var itemList = [];
// 2. 클릭 이벤트 만들기
var addBtn = document.querySelector("#add");
addBtn.addEventListener("click", addList); //addBtn.onclick = addList
// 3. 추가하는 작업
function addList(){
// 텍스트 필드 내용을 가져오기
var item = document.querySelector("#item").value;
if (item != null){
itemList.push(item); //itemList 끝에 item 내용 추가
document.querySelector("#item").value = "";
document.querySelector("#item").focus();
}
showList();
}
// 4. 목록 보여주기
function showList(){
var list = "<ul>";
for (var i =0; i < itemList.length ; i++){
list += "<li>"+ itemList[i] + "<span class='close' id=" + i + ">X</span></li>";
}
list += "</ul>";
document.querySelector('#itemList').innerHTML = list; //list 내용 표시
// 삭제버튼을 변수로 저장
var remove = document.querySelectorAll(".close");
for (var i=0; i < remove.length; i++){
remove[i].addEventListener("click", removeList); //요소를 클릭하면 removeList()실행
}
}
// 5. 삭제하는 작업
function removeList(){
var id = this.getAttribute("id"); //클릭한 삭제 버튼의 id값을 가져온다 .
itemList.splice(id, 1);
showList();
}

원하는 목록 삭제 가능
실습4.
getElementById()

getElementsClassName()

getElementsByTagName()

querySelector(), querySelectorAll()

실습5. 선택한 이미지 표시
html파일 구조
<div id="prod-pic">
<img src="images/coffee-pink.jpg" alt="에디오피아 게뎁" id="cup" width="200" height="200">
<div id="small-pic">
<img src="images/coffee-pink.jpg" class="small">
<img src="images/coffee-blue.jpg" class="small">
<img src="images/coffee-gray.jpg" class="small">
</div>
</div>
자바스크립트를 통해 클릭 시 이미지 바꾸기
var bigPic = document.querySelector("#cup");
var smallPics = document.querySelectorAll(".small"); //작은 이미지를 노드리스트로 가져옴
for (var i= 0; i< smallPics.length; i++){
smallPics[i].addEventListener("click", changePic);
}
function changePic(){
var newPic = this.src; //click이벤트가 발생한 대상의 src 속성
bigPic.setAttribute("src", newPic); // src바꾸기
}

아래 작은 이미지 클릭 시, 맞는 이미지로 변경
실습6. 상세 설명 보기/닫기 버튼
<a href="#" id="view">상세 설명 보기</a>
위와 같은 html의 a 태그의 id를 생각하여 자바스크립트 작성
var isOpen = false;
var view = document.querySelector("#view");
view.addEventListener("click", function(){
if (isOpen == false){ //상세정보가 안 보임 -> 보이게 처리
document.querySelector("#detail").style.display = "block";
view.innerHTML = "상세 설명 닫기";
isOpen = true;
}
else{ //상세정보가 보임 -> 안 보이게 처리
document.querySelector("#detail").style.display = "none";
view.innerHTML = "상세 설명 보기";
isOpen = false;
}
});

아직 기초 부분의 기능들을 접하고 있지만, 코딩을 많이 해보지 않아서, 언제 어떻게 써야할지 감이 잘 안 잡힌다. 학습한 예제와 실습, 과제만이 아닌 다른 사람이 한 코드나 예제들을 많이 접해봐야 자연스럽게 코딩이 될 것 같다.
또한, 자바스크립트에서만 고민하는 것이 아닌 html구조에서도 id값이나 class를 어떻게 두고 div로 어떤 영역을 어떻게 만들어 줄지도 중요한 것 같다.