jQuery 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;
}

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다