bookmark_borderjQuery Todo리스트 – 2

JSON

  • Javascript Object Notation 의 약자
  • 자바스크립트 객체를 자바스크립트 외부로 전송하기 위해 문자열 형태로 표현
  • 데이터가 간결하고 사람이 이해하기 쉬움
자바스크립트 Object JSON (Javascript Object Notion)
var object = {
  name: ‘이름’,
  age: 20,
  major: ‘GLS’,
  friends: [‘철수’, ‘영희’]
}
{
  “name”: “이름”,
  “age”: 20,
  “major”: “GLS”,
  “friends”: [“철수“,”영희”]
}
  • JSON.parse 를 이용해 JSON 을 자바스크립트 객체로 변환
  • JSON.stringify 를 이용해 자바스크립트 객체를 JSON 으로 변환
var obj = {
    a: 'JSON',
    b: 'NOSJ',
    arr: [1, 2, 'test']
}

console.log(obj);

var json = JSON.stringify(obj);
console.log(json);

var newObj = JSON.parse(json);
console.log(newObj);

결과:
{a: 'JSON', b: 'NOSJ', arr: Array(3)}
{"a":"JSON","b":"NOSJ","arr":[1,2,"test"]}
{a: 'JSON', b: 'NOSJ', arr: Array(3)}
var todos = {};

$("#addButton").click(function() {
    var text = $("#inputBox").val();
    todos[text] = false;
    $("#inputBox").val("");
    console.log(todos);
});

Data 어트리뷰트

  • HTML 엘리먼트에 데이터를 저장
  • $().data(‘key’, ‘value’) 로 값 저장
  • $().data(‘key’) 로 값 접근
    <script>
      var students = [
        { name:'김군오', id:'219xxx' },
        { name:'홍길동', id:'210xxx' }
      ];

      var ul = $('ul');
      for (let student of students) {
        var li = $('<li>' + student.name + '</li>');
        li.data('id', student.id);
        li.click(function(event) {
          var el = $(event.target);
          alert(el.data('id'));
        });

        ul.append(li);
      }
    </script>

Todo List

  • 추가 버튼을 클릭하면 할일목록 생성
  • 삭제버튼 누르면 삭제
  • 체크박스 클릭하면 취소선 처리
var todos = {};

$("#addButton").click(function() {
    var text = $("#inputBox").val();
    todos[text] = false;
    $("#inputBox").val("");
    console.log(todos);

    $(".contents ul").append(liTemplate(text));
});

function inputTemplate(text) {
    var inputTag = $('<input type="checkbox" id="checkBox">');
    inputTag.data('value', text);
    return inputTag;
}

function buttonTemplate(text) {
    var buttonTag = $('<button id="delButton">X</button>');
    buttonTag.data('value', text);
    return buttonTag;
}

function liTemplate(text) {    
    var li = $('<li></li>');

    li.attr('value', text);
    li.append(inputTemplate(text));
    li.append(text);
    li.append(buttonTemplate(text));

    li.click(function(event) {
        var el = $(event.target);
        //console.log(event);
        //console.log(el);
        console.log(el.data('value'));
    
        if (el.is("button")) {
            delete todos[text];
            $(`li[value='${text}']`).remove();
        }
        else if (el.is("input[type='checkbox']")) {
            var isChecked = el.is(":checked");
            if (isChecked) {
                $(`li[value='${text}']`).addClass("checked");
                todos[text] = true;
            } else {
                $(`li[value='${text}']`).removeClass("checked");
                todos[text] = false;
            }
        }
    });    

    return li;
}

bookmark_borderjQuery Todo리스트 – 1

Todo리스트 기능

  • 할 일을 기록할 수 있다
  • 저장된 일을 목록으로 보여준다
  • 할 일을 삭제 할 수 있다
  • 완료 상태로 만들 수 있다
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Todo List</title>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <link rel="stylesheet" href="./todolist.css"/>
  </head>
  <body>
    <div class="container">
      <div class="title">
        <h1>Todo List</h1>
      </div>
      <div class="contents">
        <div class="input-div">
          <input type="text" id="inputBox" />
          <button id="addButton">추가하기</button>
        </div>
        <ul>
          <li>
            <input type="checkbox" />
            웹/앱 강의 듣기
            <button id="delButton">X</button>
          </li>
          <li>
            <input type="checkbox" />
            인터넷 쇼핑 입금하기
            <button id="delButton">X</button>
          </li>
          <li>
            <input type="checkbox" />
            투두 리스트 완성하기
            <button id="delButton">X</button>
          </li>
        </ul>
        <script src="./todolist.js"></script>
      </div>
    </div>
  </body>
</html>
body {
  background: #a1d0ff;
}

.container {
  width: 300px;
  margin: auto;
}

.title,
.contents {
  background: white;
  box-shadow: 0px 4px 10px 5px rgba(0, 0, 0, 0.15);
}

.title {
  text-align: center;
}

.contents {
  padding: 10px;
}

.input-div {
  display: flex;
}

#inputBox {
  flex-grow: 1;
  height: 30px;
}

li {
  list-style: none;
  margin: 20px 0px;
}

#delButton {
  margin: 0px 5px;
}

bookmark_borderjQuery

jQuery

  • 자바스크립트 단순화 라이브러리
  • 특징
    • 빠르고, 작고, 기능이 많은 JavaScript라이브러리
    • HTML문서 조작, 이벤트 처리, 애니메이션, Ajax와 같은 것들을 간편하게 사용하게 함
    • 업계에서는 표준에 가까운 점유율을 가지고 있음
  • 라이브러리
    • 자주 사용되는 함수, 기능들을 재활용 가능하도록 만든 묶음
    • javascript는 다양한 라이브러리를 보유 : jQuery, React, Moment, lodash 등
    • jQuery는 javascript 프로그래밍 시에 도움이 되는 여러 함수들을 제공
$("#continue").text("NextStep...")
vs
document.getElementById("continue").innerHTML ="Nextstep..."

$(selector).action();

  • $ : Jquery라는 것을 정의
  • (selector) : 질의하거나 찾을 html요소
  • action() : 이 요소가 수행할 기능

Click함수

  <head>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
  </head>
  <body>
    <button id="alert">Alert!</p>
    <script src="./0512-example.js"></script>
  </body>
$("#alert").click(function() {
  alert("Button Clicked!")
});
  <body>
    <button id="alert">Alert!</p>
    <button id="button2">Click me!</p>
    <script src="./0512-example.js"></script>
  </body>
$("#alert").click(function() {
  alert("Button Clicked!");
});

$("#button2").click(function() {
  $("#alert").click();
});

Html 함수

  • html 태그의 내용을 가져온다.
  • html태그의 내용을 변경한다.
  <body>
    <div class="demo-container">
      <div class="demo-box">Demonstration Box</div>
    </div>
    <script>
      alert($("div.demo-container").html());
    </script>
  </body>
  <body>
    <div class="demo-container">
      <div class="demo-box">Demonstration Box</div>
    </div>
    <button id="btn">Click me!</p>
    <script>
      $("#btn").click(function() {
        $("div.demo-container").html("<div>Button Clicked!</div>");
      });
    </script>
  </body>

text 함수

  • html 태그의 텍스트 내용을 가져온다.
  • html태그의 텍스트 내용을 변경한다.
    <script>
      $("#btn").click(function() {
        alert($("div.demo-box").text());
      });
    </script>

remove 함수

  <body>
    <div class="demo-container">
      <div class="demo-box">Demonstration Box</div>
    </div>
    <button id="btn">Click me!</p>
    <script>
      $("#btn").click(function() {
        $("div.demo-box").remove();
      });
    </script>
  </body>

결과 :
<div class="demo-container"></div>

empty함수

    <script>
      $("#btn").click(function() {
        $("div.demo-box").empty();
      });
    </script>

결과:
    <div class="demo-container"><div class="demo-box"></div></div>

Append 함수

    <script>
      $("#btn").click(function() {
        $("div.demo-box").append("<p>Append Sample</p>");
      });
    </script>

addClass, removeClass 함수

  • addClass : 선택한 태그에 class를 추가한다
  • removeClass : 선택한 태그에서 class를 제거한다.
  • hasClass : 선택한 태그가 해당 class를 가지고 있는지 확인한다.
  <head>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <style>
      .red { color: red; }
      .yellow { color: yellow; }
    </style>
  </head>
  <body>
    <div class="demo-container">
      <div class="demo-box">Demonstration Box</div>
    </div>
    <button id="red_btn">Red</p>
    <button id="yellow_btn">Yellow</p>
    <script>
      $("#red_btn").click(function() {
        $("div.demo-box").removeClass("yellow");
        $("div.demo-box").addClass("red");
      });
      $("#yellow_btn").click(function() {
        $("div.demo-box").removeClass("red");
        $("div.demo-box").addClass("yellow");
      });
    </script>
  </body>

Val함수

  <body>
    <input type="text" id="inputBox">
    <select id="selectBox">
      <option value="1">option 1</option>
      <option value="2">option 2</option>
      <option value="3">option 3</option>
      <option value="4">option 4</option>
    </select>
    <script>
      $("#inputBox").val("Hi hi");
      $("#selectBox").val(3);
    </script>
  </body>