const commentList = document.getElementsByClassName("commentList");
console.log(commentList);
/*
HTMLCollection(1)
0: div.commentList
length: 1
[[Prototype]]: HTMLCollection
*/
const writer = document.createElement("span");
writer.className = "writer";
commentList.appendChild(writer); //commentList.appendChild is not a function
const commentArray = Array.from(commentList);
/*
[div.commentList]
0: div.commentList
length: 1
[[Prototype]]: Array(0)
*/
<head>
<style>
.red {
color: red;
}
.blue {
color: blue;
}
</style>
</head>
<body>
<ul>
<li class="red">li1</li>
<li class="red">li2</li>
<li class="red">li3</li>
</ul>
</body>
const liList = document.getElementsByClassName("red");
console.log(liList);
/*
HTMLCollection(1)
0: li.red
length: 1
[[Prototype]]: HTMLCollection
*/
for(let i = 0; i < liList.length; i++){
console.log(liList[i]);
liList[i].className = "blue"
}
liList[0] class가 blue로 바뀐다.
→ HTMLCollection에는 class = “red”인 li만 들어가야 하므로 제외된다!
liList[1] class가 blue로 바뀐다.
→ 현재 HTMLCollection에는 [li.red, li.red] 이렇게만 남아있다. 여기서 liList[1]은 두번째 li.red이므로 현재 유사배열에서의 li.red[0]은 바뀌지 않는다!
const liList = document.getElementsByClassName("red");
const liListArr = Array.from(liList);
for(let i = 0; i < liListArr.length; i++){
liListArr[i].className = "blue"
}
참고) Chamming2님 블로그
HTMLCollection과 NodeList, 너흰 누구니?
댓글창에 댓글 입력 후 "게시" 버튼을 누르면 댓글이 화면에 추가되는 기능을 구현하는데
생각대로 되지 않고 결국 끝에 가서는 혼자 해결하지 못했다.
완성된 코드를 보면서 더 열심히 공부하자고 느낀 하루였다.