<script>
window.onload = function () {
// 변수를 선언하고 element node와 text node 생성.
var title = document.createElement("h2");
var msg = document.createTextNode("Hello World !!!");
// text node를 element node에 추가.
title.appendChild(msg);
document.body.appendChild(title);
};
</script>
<script>
window.onload = function () {
var profile = document.createElement("img");
profile.src = "profile.png";
profile.width = 150;
profile.height = 200;
document.body.appendChild(profile);
};
</script>
<script>
window.onload = function () {
var profile = document.createElement("img");
profile.setAttribute("src", "profile.png");
profile.setAttribute("width", 150);
profile.setAttribute("height", 200);
// 웹 브라우저에선 지원하지 않는 속성
profile.setAttribute("data-content", "내사진");
document.body.appendChild(profile);
};
</script>
<script>
window.onload = function () {
var html = document.getElementById("divHtml");
var text = document.getElementById("divText");
var htmlToText = document.getElementById("divHtmlToText");
html.innerHTML = "<h2>Hello World!!!</h2>";
text.innerText = "<h2>Hello World!!!</h2>";
htmlToText.innerHTML = "<h2>Hello World!!!</h2>"
.replace(/</g, "<")
.replace(/>/g, ">");
// < 나 > 를 만나면 그냥 문자열 "<"과ㅏ ">"로 바꿔줌
// 따라서 innerHTML로 넣어도 태그 반영없이 문자열 그대로 출력
};
</script>
<script>
function print() {
let name = document.getElementBy("name").value;
console.log(name);
}
</script>
...
<body>
이름 : <input type="text" id="name">
<button type="button" onclick="print();">확인</button>
</body>
<script>
window.onload = function () {
var color = ["cyan", "magenta", "orange"];
var world = document.getElementsByClassName("world");
for (var i = 0; i < world.length; i++) {
world[i].style.background = color[i % 3];
}
};
</script>
</head>
<body>
<h2 class="world">Hello World 1</h2>
<h2 class="world">Hello World 2</h2>
<h2 class="world">Hello World 3</h2>
<h2 class="world">Hello World 4</h2>
<h2 class="world">Hello World 5</h2>
<h2 class="world">Hello World 6</h2>
</body>
<script>
window.onload = function () {
var color = ["cyan", "magenta", "orange"];
var world = document.getElementsByTagName("h2");
for (var i = 0; i < world.length; i++) {
world[i].style.background = color[i % 3];
}
};
</script>
</head>
<body>
<h2>Hello World 1</h2>
<h2>Hello World 2</h2>
<h2>Hello World 3</h2>
<h2>Hello World 4</h2>
<h2>Hello World 5</h2>
<h2>Hello World 6</h2>
</body>
<script>
function removeElement(th) {
let el = document.querySelector(`#world${th}`);
document.body.removeChild(el);
}
</script>
</head>
<body>
<div id="world1">
Hello world 1
<button onclick="removeElement(1);">삭제</button>
</div>
<div id="world2">
Hello world 2
<button onclick="removeElement(2);">삭제</button>
</div>
<div id="world3">
Hello world 3
<button onclick="removeElement(3);">삭제</button>
</div>
<div id="world4">
Hello world 4
<button onclick="removeElement(4);">삭제</button>
</div>
<div id="world5">
Hello world 5
<button onclick="removeElement(5);">삭제</button>
</div>
<div id="world6">
Hello world 6
<button onclick="removeElement(6);">삭제</button>
</div>
</body>
<body>
<div onclick="alert('안녕하세요');">클릭해보세요.</div>
</body>
<script>
document.getElementById("div1").onclick = function () {
alert("안녕하세요");
};
</script>
<body>
<button id="btn">클릭해보세요</button>
<script>
const btn = document.querySelector("#btn");
// 첫번째 바인딩된 이벤트 핸들러 ==> 실행되지 않는다.
btn.onclick = function () {
alert("안녕하세요!!");
};
// 두번째 바인딩된 이벤트 핸들러
btn.onclick = function () {
btn.style.color = "purple";
btn.style.fontSize = "30px";
btn.style.fontWeight = "bold";
};
</script>
</body>
<script>
document.getElementById("div1").addEventListener("click", openAlert, false);
function openAlert() {
alert("안녕하세요.");
}
</script>
// 이벤트 발생 시까지 대기하지 않고 바로 실행된다.
// input.addEventListener('blur', checkVal(MIN_ID_LENGTH));
// 이벤트 발생 시까지 대기한다. 문제는 인자값을 전달할 수 없다. Event객체가 전달.
input.addEventListener("blur", checkVal);
input.addEventListener("blur", function () {
// 이벤트 핸들러 내부에서 함수를 호출하면서 인수를 전달.
checkVal(MIN_ID_LENGTH);
});
<script>
let user = {
userid: "abc123",
username: "kim",
}
</script>
let user = {
userid: "abc123",
username: "kim",
age: 30,
office: { area: "seoul", class: 10 },
student: ["lee", "park", "choi"],
profile: null,
};
<script>
let user = {
userid: "abc123",
username: "kim",
age: 30,
office: { area: "seoul", class: 10 },
student: ["lee", "park", "choi"],
profile: null,
};
console.dir(user);
let userStr = JSON.stringify(user);
console.log(userStr);
</script>
<script>
let userStr = '{"userid":"abc123","username":"kim","age":30,"office":{"area":"seoul","class":10},"student":["lee","park","choi"],"profile":null}';
console.log(userStr);
let user = JSON.parse(userStr);
console.log(user.username);
</script>
장점 | 단점 |
---|---|
첫 페이지에 해당하는 문서만 브라우저에게 전달하여 렌더링하기 때문에 초기 로딩 속도가 CSR에 비해 빠름. → 사용자가 컨텐츠를 빨리 볼 수 있음. | 초기 페이지 로딩 이후 새로운 페이지를 요청할 때마다 서버에게 필요한 데이터를 요청하고 서버가 응답해주는 방식이다보니 이동 속도가 CSR보다 느림. |
JS를 이용한 렌더링이 아니기 때문에 검색엔진최적화(SEO)가 가능. | 서버에 매번 요청을 하기 때문에 서버의 부하가 커짐. |
장점 | 단점 |
---|---|
처음 로딩 후 동적으로 빠르게 렌더링이 되기 때문에 사용자 입장에서 UX가 좋음. | 초기 페이지 로딩이 전체 페이지에 대한 모든 문서 파일을 받다 보니 SSR에 비해 로딩 속도가 느림. |
처음에 스크립트 파일을 로드하기 때문에 서버에게 요청하는 횟수가 적어 서버의 부담이 적어지고 새로고침이 발생하지 않아 클라이언트의 네이티브 앱과 비슷한 경험을 할 수 있음. | 포털사이트의 검색엔진 크롤러가 사이트에 대한 데이터를 정확하게 수집 못하는 경우가 발생할 수 있음. → 검색엔진최적화(SEO)에 대한 추가 보완 작업이 필요. |