
<div id="body-container" class="container mt-5">
<ul class="list-group mt-5 mb-5">
<li class="list-group-item 1">An item</li>
<li class="list-group-item 2">A second item</li>
<li class="list-group-item 3">A third item</li>
<li class="list-group-item 4">A fourth item</li>
<li class="list-group-item 5">And a fifth one</li>
</ul>
</div>
let val;
const list = document.querySelector('ul.list-group');
const listItem = document.querySelector('li.list-group-item:first-child');
val = listItem;
val = list;
console.log(val);
listItem( li 첫번째 요소가 리턴 )
list( ul 전체가 리턴 )val = list.childNodes;
console.log(val);

// 이게 배열인지 확인하기
console.log(list.childNodes.filter); // undefined 라고 출력됨
console.log(Array.from(list.childNodes).filter);

유사 배열 객체( array-like object )나 반복 가능한 객체( iterable object )를
얕게 복사해 새로운 Array 객체를 만듦🧩✨
val = list.childNodes[0];
console.log(val);

val = list.childNodes[0].nodeName;
console.log(val); // #text 출력됨
val = list.childNodes[3];
console.log(val);

val = list.childNodes[3].nodeType;
console.log(val); // 요소는 1번에 해당되니까 출력은 1

val = list.children;
console.log(val);

val = list.children[1];
console.log(val);

// 콘텐츠가 Hi로 바뀌는 걸 볼 수 있음
val = list.children[1].textContent = 'Hi';
val = list.firstChild;
console.log(val); // 출력 : #text
val = list.firstElementChild;
console.log(val); // 출력 : li.list-group-item.1
val = list.childElementCount;
console.log(val); // 출력 : 4
let val;
const listItem = document.querySelector('li.list-group-item:first-child');
val = listItem.parentNode;
// 출력 : ul.list-group.mt-5.mb-5 ( 부모 출력됨 )
console.log(val);
val = listItem.parentElement;
console.log(val); // 위와 똑같은 게 출력됨
val = listItem.parentElement.parentElement;
// 출력 : div#body-container.container.mt-5
console.log(val);

val = listItem.nextSibling;
console.log(val); // 출력 : #text
val = listItem.nextElementSibling;
console.log(val); // 출력 : li.list-group-item.3

val = listItem.nextElementSibling.nextElementSibling;
console.log(val); // 출력 : li.list-group-item.4
val = listItem.nextElementSibling.nextElementSibling.previousElementSibling;
console.log(val); // 출력 : li.list-group-item.3
val = listItem.previousSibling;
console.log(val); // 출력 : #text
<div id="body-container" class="container mt-5">
<ul class="list-group mt-5 mb-5">
<li class="list-group-item">An item</li>
<li class="list-group-item">A second item</li>
</ul>
</div>

// element 생성
const li = document.createElement('li'); // li 태그를 생성한 것
// -> 지금은 <li></li> 이렇게만 생성한거임
// class 생성
li.className = 'list-group-item';
// -> <li class="list-group-itme"></li>
// id 추가
li.id = 'new-item';
// -> <li class="list-group-itme" id="new-item"></li>
// 속성 이름과 값 추가
li.setAttribute = ('name', 'New list item');
// -> <li class="list-group-itme" id="new-item" name="New lis t item"></li>
// 텍스트 추가
// 텍스트는 li의 child이기 때문에
li.appendChild(
document.createTextNode('New list Item');
)
/*
<li class="list-group-itme" id="new-item" name="New lis t item">
New list Item
</li>
*/
// 생성은 됐자만 화면엔 아직 반영이 안 될거임
// 화면에 반영하기
document.querySelector('ul.list-group').appendChild(li);

// 링크 넣기 a 태그니까 요소 Element
const link = document.createElement('a');
// 클래스 추가
link.className = 'alarm-item';
// -> <a class='alarm-item'></a>
// i 이탤릭 태그 요소 Element 추가
link.innerHTML = '<i class="bi-alarm"></i>'
// appendChild로 li 태그 안에 link 넣어주기
li.appendChild(link);
// -> <a class='alarm-item'><i class="bi-alarm"></i></a>

// Remove 부모 Node
const listParent = document.querySelector('ul'); // 부모에게 접근
const list = document.querySelectorAll('li'); // 자식들 li 모두 접근
// listParent에서 removeChild 메서드 이용해서 원하는 자식 삭제하기
listParent.removeChild(list[1]); // 인덱스 1번 자식 삭제
// 이렇게 하면 1번째인 A secode item이 삭제됨
<div id="body-container" class="container mt-5">
<ul class="list-group mt-5 mb-5">
<li class="list-group-item">An item</li>
<li class="list-group-item">A second item</li>
</ul>
<div id="A">Hello</div>
</div>
const oldElement = document.getElementById('A');
const newElement = document.createElement('span');
newElement.textContent = 'Hi';
// 어떤걸 교체할건지 -> replaceChild
oldElement.parentNode.replaceChild(newElement, oldElement);