📌 " html 문서 앞에 script 태그 내에 js코드를 작성했고, 문서가 로드 되기 전에 script의 element를 가져오지 못한 상태에서 console.log로 디버그하여 개발자도구에 확인해보았을때는 왜 element(li 태그)를 반환했는지 원인이 궁금하다. " -
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<title>JavaScript DOM Element</title>
<script>
//HTML 태그 이름을 이용한 선택
//여기는 일단 실행 1번
console.log("aaa");
var selectedItem = document.getElementsByTagName("li");
// 모든 <li> 요소를 선택함.
//가져오는 것까지 성공 2번
console.log(selectedItem);
//그래서 콘솔 찍으면 li 태그들을 가져오긴 함
console.log(selectedItem.length);
//length까지도 확인이 됨
selectedItem.item(1).style.color = "red";
for (var i = 0; i < selectedItem.length; i++) {
selectedItem.item(i).style.color = "red";
// 선택된 모든 요소의 텍스트 색상을 변경함.
console.log(selectedItem.item(i));
}
</script>
</head>
<body>
<!-- 마지막으로 여기에 있는 것들이 실행된 것으로 추정 ! -->
<h1>HTML 태그 이름을 이용한 선택</h1>
<ul>
<li>첫 번째 아이템이에요!</li>
<li>두 번째 아이템이에요!</li>
<li>세 번째 아이템이에요!</li>
<li>네 번째 아이템이에요!</li>
<li>다섯 번째 아이템이에요!</li>
</ul>
</body>
</html>
구조를 먼저 보도록 하면,
문서의 형태: html
문서의 구조: <head> 내부에 <script> 내용이 들어가 있고, <body>내부에 html 마크업이 되어있는 상태.
HTMLCollection 안에 유사배열 형태로 body태그 안에 있는 li 태그를 받아온 것을 확인 !
script 태그 안에 작성된 스타일이 적용되지 않는걸까?
그러니깐, JS 스크립트를 먼저 읽는 동안 브라우저는 동시에 HTML에 적힌 내용을 해석하는데, 해석하는 동안에 JS 스크립트는 이미 적용됐지만 ! HTML에 적힌 내용은 아직 렌더되지 못한 상황에서 JS 스크립트가 렌더되어 버림. HTML의 속성이 for문 안으로 들어가서 적용되기 전에 이미 for문에 해당하는 것들이 HTML li 태그의 list를 가져오지 못한 상태에서 미리 돌아가버린 것.
내가 이번 문제를 접근한 방법.....
불러오는 web api 종류가 이상했던 모양이다. 아닌가?
web api로 반환된 HTMLCollection의 특징인듯. 아닌가?
실행시...저..ㅁ.아 이거라고?
역시 스크립트 배치의 문제인듯! 아니 그럼 li 태그를 왜 가져온거야? 아...for문을 못읽네ㅋㅋㅋ
렌더링 시점의 차이였어..!