19 |
21 |
--------------------------------------------------------------------------------
/07/js/sol-2.js:
--------------------------------------------------------------------------------
1 | var quotes = [];
2 | quotes[0] = "당신은 지금도 최고고, 이전에도 최고였으며 앞으로도 최고일 것입니다.";
3 | quotes[1] = "성공하는 사람은 실패하는데 익숙한 사람이다.";
4 | quotes[2] = "후회를 최대한 이용하라. 깊이 후회한다는 것은 새로운 삶은 산다는 것이다.";
5 | quotes[3] = "가짜 친구는 소문을 믿고 진짜 친구는 나를 믿는다.";
6 | quotes[4] = "성공이라는 못을 박으려면 끈질김이라는 망치가 필요하다.";
7 | quotes[5] = "인생이란 결코 공평하지 않다. 이 사실에 익숙해져라.";
8 | quotes[6] = "'언젠가'라는 날은 영원히 오지 않는다.";
9 | quotes[7] = "문제점을 찾지 말고 해결책을 찾으라.";
10 | quotes[8] = "착한 일은 작다 해서 아니하지 말고, 악한 일은 작다 해도 하지 말라.";
11 | quotes[9] = "자존심은 어리석은 자의 소유물이다";
12 |
13 | var index = Math.floor(Math.random() * 10);
14 | document.write("
Labore do officia velit mollit eu pariatur. Do aute sunt aute dolore labore incididunt Lorem mollit laborum adipisicing. Ipsum adipisicing amet ut in. Lorem incididunt sunt et excepteur amet occaecat culpa incididunt exercitation. Labore excepteur Lorem voluptate ipsum magna consequat eiusmod ex anim labore pariatur eiusmod. Excepteur amet non magna est.
2차 세계대전 이후 설립된 게뎁 농장은 유기농 인증 농장으로 여성의 고용 창출과 지역사회 발전에 기여하며 3대째 이어져 내려오는 오랜 역사를 가진 농장입니다. 게뎁 농장은 SCAA 인증을 받은 커피
24 | 품질관리 실험실을 갖추고 있어 철처한 관리를 통해 스페셜티 커피를 생산합니다.
Labore do officia velit mollit eu pariatur. Do aute sunt aute dolore labore incididunt Lorem mollit laborum adipisicing. Ipsum adipisicing amet ut in. Lorem incididunt sunt et excepteur amet occaecat culpa incididunt exercitation. Labore excepteur Lorem voluptate ipsum magna consequat eiusmod ex anim labore pariatur eiusmod. Excepteur amet non magna est.
2차 세계대전 이후 설립된 게뎁농장은 유기농 인증 농장으로 여성의 고용 창출과 지역사회 발전에 기여하며 3대째 이어져 내려오는 오랜 역사를 가진 농장입니다. 게뎁 농장은 SCAA 인증을 받은 커피 품질관리 실험실을 갖추고 있어 철처한 관리를 통해 스페셜티커피를 생산합니다.
19 |
Flavor Note
20 |
은은하고 다채로운 꽃향, 망고, 다크 체리, 달달함이 입안 가득.
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/09/js/signup.js:
--------------------------------------------------------------------------------
1 | var userId = document.querySelector("#user-id"); // ‘아이디’ 필드를 가져와 변수에 저장
2 | var pw1 = document.querySelector("#user-pw1"); // ‘비밀번호’ 필드를 가져와 변수에 저장
3 | var pw2 = document.querySelector("#user-pw2"); // ‘비밀번호 확인’ 필드를 가져와 변수에 저장
4 |
5 | function checkId() {
6 | if (userId.value.length < 4 || userId.value.length > 15) { // userId 필드 내용의 길이가 4 이하이거나 15 이상일 경우 실행
7 | alert("4~15자리의 영문과 숫자를 사용하세요."); // 오류 메시지 출력
8 | userId.select();
9 | }
10 | }
11 |
12 | function checkPw() {
13 | if (pw1.value.length < 8) {
14 | alert("비밀번호는 8자리 이상이어야 합니다."); // 오류 메시지 표시
15 | pw1.value = ""; // ‘비밀번호’ 필드 지움
16 | pw1.focus(); // 비밀번호를 다시 입력할 수 있게 포커싱
17 | }
18 | }
19 |
20 | function comparePw() {
21 | if(pw1.value != pw2.value) {
22 | alert("암호가 다릅니다. 다시 입력하세요.");
23 | pw2.value = ""; // ‘비밀번호 확인’ 필드 지움
24 | pw2.focus(); // 비밀번호를 다시 입력할 수 있게 포커싱
25 | }
26 | }
--------------------------------------------------------------------------------
/09/js/signup-result.js:
--------------------------------------------------------------------------------
1 | var userId = document.querySelector("#user-id"); // ‘아이디’ 필드를 가져와 변수에 저장
2 | var pw1 = document.querySelector("#user-pw1"); // ‘비밀번호’ 필드를 가져와 변수에 저장
3 | var pw2 = document.querySelector("#user-pw2"); // ‘비밀번호 확인’ 필드를 가져와 변수에 저장
4 |
5 | function checkId() {
6 | if (userId.value.length < 4 || userId.value.length > 15) { // userId 필드 내용의 길이가 4 이하이거나 15 이상일 경우 실행
7 | alert("4~15자리의 영문과 숫자를 사용하세요."); // 오류 메시지 출력
8 | userId.select();
9 | }
10 | }
11 |
12 | function checkPw() {
13 | if (pw1.value.length < 8) {
14 | alert("비밀번호는 8자리 이상이어야 합니다."); // 오류 메시지 표시
15 | pw1.value = ""; // ‘비밀번호’ 필드 지움
16 | pw1.focus(); // 비밀번호를 다시 입력할 수 있게 포커싱
17 | }
18 | }
19 |
20 | function comparePw() {
21 | if(pw1.value != pw2.value) {
22 | alert("암호가 다릅니다. 다시 입력하세요.");
23 | pw2.value = ""; // ‘비밀번호 확인’ 필드 지움
24 | pw2.focus(); // 비밀번호를 다시 입력할 수 있게 포커싱
25 | }
26 | }
--------------------------------------------------------------------------------
/실전프로젝트/converter/converter-result.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 단위 변환기
8 |
9 |
10 |
11 |
12 |
섭씨 ⟺ 화씨 온도 변환기
13 |
14 |
15 |
16 | ℃
17 |
18 | ⟺
19 |
20 |
21 | ℉
22 |
23 |
24 |
25 |
37 |
38 |
--------------------------------------------------------------------------------
/09/css/order.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin:0;
3 | padding:0;
4 | box-sizing: border-box;
5 | }
6 | ul {
7 | list-style: none;
8 | }
9 | legend {
10 | font-size:1.2em;
11 | font-weight:bold;
12 | margin-left:20px;
13 | }
14 |
15 | form {
16 | width:520px;
17 | height:auto;
18 | padding-left:10px;
19 | margin:50px auto;
20 | }
21 | fieldset {
22 | border:1px solid #c0c0c0;
23 | padding:30px 20px 30px 30px;
24 | margin-bottom:35px;
25 | }
26 |
27 | .field {
28 | float:left;
29 | width:60px;
30 | font-weight:bold;
31 | font-size:0.9em;
32 | line-height: 55px;
33 | text-align:right;
34 | margin-right:15px;
35 | }
36 |
37 | .input-box {
38 | width:350px;
39 | height:35px;
40 | border:1px solid #aaa;
41 | border-radius:5px;
42 | padding:5px;
43 | margin:10px 0;
44 | float:left;
45 | }
46 |
47 | .order {
48 | width:100%;
49 | padding:20px;
50 | border:1px solid #aaa;
51 | background:#e9e9e9;
52 | font-size:1em;
53 | font-weight:bold;
54 | }
55 |
--------------------------------------------------------------------------------
/09/js/shipment-result.js:
--------------------------------------------------------------------------------
1 | var check = document.querySelector("#shippingInfo"); // 체크박스의 id는 shippingInfo
2 |
3 | check.addEventListener("click", function() { // check 요소에 click 이벤트가 발생했을 때 실행할 함수
4 | var nameInfo = document.querySelector("#billingName").value; // 주문 정보 - 이름
5 | var telInfo = document.querySelector("#billingTel").value; // 주문 정보 - 전화번호
6 | var addrInfo = document.querySelector("#billingAddr").value; // 주문 정보 - 주소
7 |
8 | if(check.checked == true) { // 체크되었다면
9 | document.querySelector("#shippingName").value = nameInfo; // 주문 정보(이름)를 배송 정보(이름)에 복사
10 | document.querySelector("#shippingTel").value = telInfo; // 주문 정보(전화번호)를 배송 정보(전화번호)에 복사
11 | document.querySelector("#shippingAddr").value = addrInfo; // 주문 정보(주소)를 배송 정보(주소)에 복사
12 | }
13 | else { // 체크되어 있지 않다면 배송 정보 필드를 지움.
14 | document.querySelector("#shippingName").value = "";
15 | document.querySelector("#shippingTel").value = "";
16 | document.querySelector("#shippingAddr").value = "";
17 | }
18 | });
19 |
--------------------------------------------------------------------------------
/06/js/diy-dday-result.js:
--------------------------------------------------------------------------------
1 | var now = new Date();
2 | var firstDay = new Date("2018-03-23");
3 | var toNow = now.getTime();
4 | var toFirst = firstDay.getTime();
5 | var passedTime = toNow - toFirst;
6 | var passedDay = Math.round(passedTime/(24*60*60*1000));
7 | document.querySelector('#accent').innerText = passedDay + "일";
8 |
9 | calcDate(100); // 100일 기념일을 계산해서 표시합니다.
10 | calcDate(200); // 200일 기념일을 계산해서 표시합니다.
11 | calcDate(365); // 1년 기념일을 계산해서 표시합니다.
12 | calcDate(500); // 500일 기념일을 계산해서 표시합니다.
13 |
14 | function calcDate(days) {
15 | var future = toFirst + days*(1000*60*60*24); // 처음 만난 날에 밀리초로 바꾼 100일을 더합니다.
16 | var someday = new Date(future); // future 값을 사용해 Date 객체의 인스턴스를 만듭니다.
17 | var year = someday.getFullYear( ); // ‘연도’를 가져와 year 변수에 저장합니다.
18 | var month = someday.getMonth( ) + 1; // ‘월’을 가져와 month 변수에 저장합니다.
19 | var date = someday.getDate( ); // ‘일’을 가져와 date 변수에 저장합니다.
20 | document.querySelector("#date"+days).innerText = year + "년 " + month + "월 " + date + "일";
21 | }
22 |
--------------------------------------------------------------------------------
/09/js/shipment.js:
--------------------------------------------------------------------------------
1 | var check = document.querySelector("#shippingInfo"); // 체크박스의 id는 shippingInfo
2 |
3 | var nameInfo = document.querySelector("#billingName").value; // 주문 정보 - 이름
4 | var telInfo = document.querySelector("#billingTel").value; // 주문 정보 - 전화번호
5 | var addrInfo = document.querySelector("#billingAddr").value; // 주문 정보 - 주소
6 |
7 | check.addEventListener("click", function() { // check 요소에 click 이벤트가 발생했을 때 실행할 함수
8 | if(check.checked == true) { // 체크되었다면
9 | document.querySelector("#shippingName").value = nameInfo; // 주문 정보(이름)를 배송 정보(이름)에 복사
10 | document.querySelector("#shippingTel").value = telInfo; // 주문 정보(전화번호)를 배송 정보(전화번호)에 복사
11 | document.querySelector("#shippingAddr").value = addrInfo; // 주문 정보(주소)를 배송 정보(주소)에 복사
12 | }
13 | else { // 체크되어 있지 않다면 배송 정보 필드를 지움.
14 | document.querySelector("#shippingName").value = "";
15 | document.querySelector("#shippingTel").value = "";
16 | document.querySelector("#shippingAddr").value = "";
17 | }
18 | });
--------------------------------------------------------------------------------
/03/bargain-temp.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 할인 가격 구하기
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | 원
17 |
18 |
19 |
20 | %
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
36 |
37 |
--------------------------------------------------------------------------------
/실전프로젝트/converter/js/converter-result.js:
--------------------------------------------------------------------------------
1 | var sUnit = document.querySelector("#s-unit"); // 왼쪽 텍스트 필드 옆에 표시하는 단위
2 | var tUnit = document.querySelector("#t-unit"); // 오른쪽 텍스트 필드 옆에 표시하는 단위
3 | var cToF = true; // 섭씨에서 화씨로 변환
4 |
5 | var source = document.querySelector("#s-value"); // 왼쪽 필드
6 | var target = document.querySelector("#t-value"); // 오른쪽 필드
7 |
8 | function exUnit() {
9 | source.value = ""; // 왼쪽 텍스트 필드 값 지움
10 | target.value = ""; // 오른쪽 텍스트 필드 값 지움
11 |
12 | if (cToF) {
13 | cToF = false; // 화씨 -> 섭씨 변환
14 | sUnit.innerHTML = "℉"; // 화씨 기호
15 | tUnit.innerHTML = "℃"; // 섭씨 기호
16 | }
17 | else {
18 | cToF = true; // 섭씨 -> 화씨 변환
19 | sUnit.innerHTML = "℃"; // 섭씨 기호
20 | tUnit.innerHTML = "℉"; // 화씨 기호
21 | }
22 | }
23 |
24 | function converter() {
25 | if(cToF) {
26 | target.value = (source.value * 1.8 + 32).toFixed(2); // 섭씨 -> 화씨 계산
27 | }
28 | else {
29 | target.value = ((source.value - 32) / 1.8).toFixed(2); // 화씨 -> 섭씨 계산
30 | }
31 | }
--------------------------------------------------------------------------------
/09/js/register-result.js:
--------------------------------------------------------------------------------
1 | var userId = document.querySelector("#user-id"); // ‘아이디’ 필드를 가져와 변수에 저장
2 | var pw1 = document.querySelector("#user-pw1"); // ‘비밀번호’ 필드를 가져와 변수에 저장
3 | var pw2 = document.querySelector("#user-pw2"); // ‘비밀번호 확인’ 필드를 가져와 변수에 저장
4 |
5 | userId.onchange = checkId;
6 | pw1.onchange = checkPw;
7 | pw2.onchange = comparePw;
8 |
9 | function checkId() {
10 | if (userId.value.length < 4 || userId.value.length > 15) { // userId 필드 내용의 길이가 4 이하이거나 15 이상일 경우 실행
11 | alert("4~15자리의 영문과 숫자를 사용하세요."); // 오류 메시지 출력
12 | userId.select(); // 다시 입력할 수 있도록 userId 필드 선택
13 | }
14 | }
15 |
16 | function checkPw() {
17 | if (pw1.value.length < 8) {
18 | alert("비밀번호는 8자리 이상이어야 합니다."); // 오류 메시지 표시
19 | pw1.value = ""; // ‘비밀번호’ 필드 지움
20 | pw1.focus(); // 비밀번호를 다시 입력할 수 있게 포커싱
21 | }
22 | }
23 |
24 | function comparePw() {
25 | if(pw1.value != pw2.value) {
26 | alert("암호가 다릅니다. 다시 입력하세요.");
27 | pw2.value = ""; // ‘비밀번호 확인’ 필드 지움
28 | pw2.focus(); // 비밀번호를 다시 입력할 수 있게 포커싱
29 | }
30 | }
--------------------------------------------------------------------------------
/04/for-result.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 중첩된 for 문
8 |
9 |
10 |
11 |
41 |
42 |
--------------------------------------------------------------------------------
/실전프로젝트/slideShow/js/slideshow-result.js:
--------------------------------------------------------------------------------
1 | var slides = document.querySelectorAll("#container > img"); // 이미지들을 저장한 배열
2 | var prev = document.querySelector("#prev"); // 이전 버튼
3 | var next = document.querySelector("#next"); // 다음 버튼
4 | var current = 0; // 표시할 이미지 위치
5 |
6 | showSlide(current); // showSlide( ) 함수를 실행해 current 위치의 이미지 표시
7 | prev.onclick = prevSlide; // prev를 클릭하면 prevSlide 함수 실행
8 | next.onclick = nextSlide; // next를 클릭하면 nextSlide 함수 실행
9 |
10 | function showSlide(n) {
11 | for(var i=0; i 0) current -= 1; // 현재 이미지가 첫번째가 아닐 경우, -1 위치로
19 | else current = slides.length - 1; // 현재 이미지가 첫번째라면 마지막으로
20 | showSlide(current); // 이동한 위치의 이미지 표시
21 | }
22 |
23 | function nextSlide() {
24 | if (current < slides.length -1) current += 1; // 현재 이미지가 마지막이 아니라면 +1 위치로
25 | else current = 0; // 현재 이미지가 마지막이라면 첫번째 위치로
26 | showSlide(current); // 이동한 위치의 이미지 표시
27 | }
--------------------------------------------------------------------------------
/08/css/dom.css:
--------------------------------------------------------------------------------
1 | #container { /* id="container"인 요소에 적용할 스타일 */
2 | width:800px;
3 | height:500px;
4 | margin:0 auto;
5 | padding:20px 10px 0 50px;;
6 | border:1px solid #ccc;
7 | }
8 | #prod-img, #desc { /* id="prod-img"인 요소와 id="desc"인 요소에 공통으로 적용할 스타일 */
9 | float:left;
10 | }
11 | #prod-img { /* id="desc"인 요소에 적용할 스타일 */
12 | margin:20px 50px auto 10px;
13 | }
14 | #prod-img img { /* id="desc"인 요소의 하위 요소 중 img 요소에 적용할 스타일 */
15 | border:1px solid #ccc;
16 | outline:1px dashed rgb(253, 186, 0);
17 | outline-offset: -7px;
18 | }
19 | #desc { /* id="desc"인 요소에 적용할 스타일 */
20 | width:300px;
21 | }
22 | h1 { /* h1 요소에 적용할 스타일 */
23 | font-size:1.8em;
24 | }
25 | h2 { /* h2 요소에 적용할 스타일 */
26 | font-size:1.3em;
27 | color:#222;
28 | }
29 | p { /* p 요소에 적용할 스타일 */
30 | font-size:0.9em;
31 | line-height:1.4;
32 | text-align: justify;
33 | }
34 | .accent {
35 | font-weight:700;
36 | font-size:1.0em;
37 | font-style:italic;
38 | }
39 | .bright { /* class="bright"인 요소에 적용할 스타일 */
40 | color:blue;
41 | }
--------------------------------------------------------------------------------
/06/dday.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | D-Day for love
7 |
8 |
9 |
10 |
28 |
29 |
42 |
43 |
--------------------------------------------------------------------------------
/실전프로젝트/converter/css/converter.css:
--------------------------------------------------------------------------------
1 | body{
2 | box-sizing: border-box;
3 | }
4 | .container {
5 | width:350px;
6 | margin:30px auto;
7 | }
8 | .container > h2 {
9 | text-align:center;
10 | }
11 | .change {
12 | box-sizing: border-box;
13 | width:100%;
14 | padding:15px 20px;
15 | background:#fbfbfb;
16 | border:1px solid #eee;
17 | }
18 | .box {
19 | display:inline-block;
20 | height:28px;
21 | border:1px solid #ddd;
22 | background-color:#fff;
23 | }
24 | #exchange {
25 | display:inline-block;
26 | width:20px;
27 | height:25px;
28 | margin:0 10px;
29 | line-height:25px;
30 | }
31 | #exchange:hover {
32 | cursor: pointer;
33 | }
34 | .box input[type="text"] {
35 | display:inline-block;
36 | width:80px;
37 | height:25px;
38 | padding-right:3px;
39 | border:0;
40 | line-height:25px;
41 | font-size:12px;
42 | font-weight:bold;
43 | text-align:right;
44 | }
45 | .unit {
46 | width:40px;
47 | height:25px;
48 | padding-right:10px;
49 | line-height: 25px;
50 | font-family:"돋움";
51 | font-size:12px;
52 | text-align:right;
53 | }
54 |
--------------------------------------------------------------------------------
/06/js/dday-100.js:
--------------------------------------------------------------------------------
1 | var now = new Date(); // 오늘 날짜 정보를 Date 객체의 인스턴스 now 객체로 만듭니다.
2 | var firstDay = new Date("2018-03-23"); // 처음 만난 날의 날짜 정보를 firstDay 객체로 만듭니다.
3 | var toNow = now.getTime(); // 오늘 날짜를 밀리초로 바꿉니다.
4 | var toFirst = firstDay.getTime(); // 처음 만난 날을 밀리초로 바꿉니다.
5 | var passedTime = toNow - toFirst; // 처음 만난 날과 오늘 사이의 차이 (밀리초)
6 | var passedDay = Math.round(passedTime/(24*60*60*1000)); // 밀리초를 일로 변환 후 반올림합니다.
7 | document.querySelector('#accent').innerText = passedDay + "일"; // #accent 영역에 표시합니다.
8 |
9 | var future = toFirst + 100*(1000*60*60*24); // 처음 만난 날에 밀리초로 바꾼 100일을 더합니다.
10 | var someday = new Date(future); // future100 값을 사용해 Date 객체의 인스턴스를 만듭니다.
11 | var year = someday.getFullYear( ); // ‘연도’를 가져와 year 변수에 저장합니다.
12 | var month = someday.getMonth( ); // '월'을 가져와 month 변수에 저장합니다.
13 | var date = someday.getDate( ); // '일'을 가져와 date 변수에 저장합니다.
14 | document.querySelector("#date100").innerText = year + "년 " + month + "월 " + date + "일";
15 |
16 | future = toFirst + 200*(1000*60*60*24); // 처음 만난 날에 밀리초로 바꾼 200일을 더합니다.
17 | someday = new Date(future); // future 값을 사용해 Date 객체의 인스턴스를 만듭니다.
18 | year = someday.getFullYear( ); // ‘연도’를 가져와 year 변수에 저장합니다.
19 | month = someday.getMonth( ); // '월'을 가져와 month 변수에 저장합니다.
20 | date = someday.getDate( ); // '일'을 가져와 date 변수에 저장합니다.
21 | document.querySelector("#date200").innerText = year + "년 " + month + "월 " + date + "일";
--------------------------------------------------------------------------------
/09/sol-1.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 연습문제 1
8 |
9 |
10 |
11 |
12 |
피자 주문
13 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/08/js/register-delete.js:
--------------------------------------------------------------------------------
1 | function newRegister() {
2 | var newP = document.createElement("p"); // 새 p 요소 만들기
3 | var userName = document.querySelector("#userName");
4 | var newText = document.createTextNode(userName.value); // 새 텍스트 노드 만들기
5 | newP.appendChild(newText); // 텍스트 노드를 p 요소의 자식 요소로 연결하기
6 |
7 | var delBttn = document.createElement("span"); // 새 button 요소 만들기
8 | var delText = document.createTextNode("X"); // 새 텍스트 노드 만들기
9 | delBttn.setAttribute("class", "del"); // 버튼에 class 속성 설정하기
10 | delBttn.appendChild(delText); // 텍스트 노드를 button 요소의 자식 요소로 연결하기
11 | newP.appendChild(delBttn); // del 버튼을 p 요소의 자식 요소로
12 |
13 | var nameList = document.querySelector("#nameList");
14 | nameList.insertBefore(newP, nameList.childNodes[0]); // p 요소를 #nameList 맨 앞에 추가하기
15 | // nameList.appendChild(newP); // p 요소를 #nameList의 자식 요소로 만들기
16 | userName.value = ""; // 텍스트 필드 지우기
17 |
18 | var removeBttns = document.querySelectorAll(".del");
19 |
20 | for (var i=0; i 태그 저장
18 | for (var i = 0; i < itemList.length; i++) { // 배열 요소마다 반복
19 | list += "
" + itemList[i] + "X
"; // 요소와 삭제 버튼을
~
로 묶음
20 | }
21 | list += ""; // 목록을 끝내는 태그 저장
22 |
23 | document.querySelector('#itemList').innerHTML = list; // list 내용 표시
24 |
25 | var remove = document.querySelectorAll(".close"); // 삭제 버튼을 변수로 저장. 배열 형태가 됨
26 | for (var i = 0; i < remove.length; i++) { // remove 배열의 요소 모두를 확인
27 | remove[i].addEventListener("click", removeList); // 요소를 클릭하면 removeList() 실행
28 | }
29 | }
30 |
31 | function removeList() {
32 | var id = this.getAttribute("id"); // this(클릭한 삭제 버튼)의 id 값 가져와 id 변수에 저장
33 | itemList.splice(id, 1); // itemList 배열에서 인덱스 값이 id인 요소 1개 삭제
34 | showList(); // 변경된 itemList 배열을 다시 화면에 표시
35 | }
--------------------------------------------------------------------------------
/07/js/diy-itemList.js:
--------------------------------------------------------------------------------
1 | var itemList = [];
2 | var addBtn = document.querySelector('#add');
3 | addBtn.addEventListener("click", addList);
4 |
5 | getItems();
6 |
7 | function getItems() {
8 | var storedData = localStorage.getItem("storageList");
9 | if(storedData != null) itemList = JSON.parse(storedData);
10 | showList();
11 | }
12 |
13 | function addList() {
14 | var item = document.querySelector('#item').value;
15 | if(item != null) {
16 | itemList.push(item);
17 | document.querySelector('#item').value = "";
18 | document.querySelector('#item').focus();
19 | }
20 | localStorage.setItem("storageList", JSON.stringify(itemList));
21 | showList();
22 | }
23 |
24 | function showList() {
25 | var list = "
";
26 | for (var i=0; i" + itemList[i] + "X";
28 | }
29 | list += "
태그 저장
18 | for (var i=0; i" + itemList[i] + "X"; // 요소와 삭제 버튼을
~
로 묶음
20 | }
21 | list += "
"; // 목록을 끝내는
태그 저장
22 |
23 | document.querySelector('#itemList').innerHTML = list; // list 내용 표시
24 |
25 | var remove = document.querySelectorAll(".close"); // 삭제 버튼을 변수로 저장. 배열 형태가 됨
26 | for(var i = 0; i < remove.length; i++) { // remove 배열의 요소 모두를 확인
27 | remove[i].addEventListener("click", removeList); // 요소를 클릭하면 removeList() 실행
28 | }
29 | }
30 |
31 | function removeList() {
32 | var id = this.getAttribute("id"); // this(클릭한 삭제 버튼)의 id 값 가져와 id 변수에 저장
33 | itemList.splice(id, 1); // itemList 배열에서 인덱스 값이 id인 요소 1개 삭제
34 | showList(); // 변경된 itemList 배열을 다시 화면에 표시
35 | }
--------------------------------------------------------------------------------
/09/register.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 회원 가입
9 |
10 |
11 |
2차 세계대전 이후 설립된 게뎁 농장은 유기농 인증 농장으로 여성의 고용 창출과 지역사회 발전에 기여하며 3대째 이어져 내려오는 오랜 역사를 가진 농장입니다. 게뎁 농장은 SCAA 인증을 받은 커피 품질관리 실험실을 갖추고 있어 철처한 관리를 통해 스페셜티 커피를 생산합니다.
2차 세계대전 이후 설립된 게뎁 농장은 유기농 인증 농장으로 여성의 고용 창출과 지역사회 발전에 기여하며 3대째 이어져 내려오는 오랜 역사를 가진 농장입니다. 게뎁 농장은 SCAA 인증을 받은 커피 품질관리 실험실을 갖추고 있어 철처한 관리를 통해 스페셜티 커피를 생산합니다.
2차 세계대전 이후 설립된 게뎁 농장은 유기농 인증 농장으로 여성의 고용 창출과 지역사회 발전에 기여하며 3대째 이어져 내려오는 오랜 역사를 가진 농장입니다. 게뎁 농장은 SCAA 인증을 받은 커피 품질관리 실험실을 갖추고 있어 철처한 관리를 통해 스페셜티 커피를 생산합니다.
2차 세계대전 이후 설립된 게뎁 농장은 유기농 인증 농장으로 여성의 고용 창출과 지역사회 발전에 기여하며 3대째 이어져 내려오는 오랜 역사를 가진 농장입니다. 게뎁 농장은 SCAA 인증을 받은 커피 품질관리 실험실을 갖추고 있어 철처한 관리를 통해 스페셜티 커피를 생산합니다.
2차 세계대전 이후 설립된 게뎁 농장은 유기농 인증 농장으로 여성의 고용 창출과 지역사회 발전에 기여하며 3대째 이어져 내려오는 오랜 역사를 가진 농장입니다. 게뎁 농장은 SCAA 인증을 받은 커피 품질관리 실험실을 갖추고 있어 철처한 관리를 통해 스페셜티 커피를 생산합니다.