CSS&JS/👀Study and Copy

[vanilla JS] jQuery 없이 html include 하는 방법 : fetch

arancia_ 2021. 9. 2. 17:32
어떻게 하면 jQuery를 쓰지 않고 html을 include 할 수 있을까?

기존 jQuery로 html을 include 하는 방법을 보다가
jQuery의 .load()를 바닐라 자바스크립트로 하면 어떻게 구현할 수 있을까 궁금해졌다.

스택오버플로우의 답변을 참고하여 만들었음

이전에 포스팅했던 jQuery 없이 html include하기는 AJAX를 사용해서 하는건데..훨씬 복잡하다.
이번에는 엄청 간단하게 fetch로 할거임!

 

폴더구조는 왼쪽과 같다.

 

HTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>include html without jquery</title>
<script src="./src/main.js" type="module"></script>
</head>
<body>
<!-- https://stackoverflow.com/questions/38132510/equivalent-to-load-without-jquery -->
 
<header data-include="./include/header.html"></header>
<main data-include="./include/content.html"></main>
<footer data-include="./include/footer.html"></footer>
 
</body>
</html>
cs



JS - main.js

1
2
3
4
import { includeHTML } from "./include.js";
 
/* 실행 */
includeHTML();
cs



JS - include.js

1
2
3
4
5
6
7
8
9
10
11
12
13
export function includeHTML(){
    const includeArea = document.querySelectorAll('[data-include]');
 
    for(let dom of includeArea){
        const url = dom.dataset.include;
        fetch(url)
        .then(response => response.text())
        .then(data =>{
            dom.innerHTML = data;
            dom.removeAttribute('data-include');
        });
    }//for
}//includeHTML
cs