디지털 컨버전스/Java Script

[JQuery] 동적 테이블

gimyeondong 2020. 4. 20. 10:51

입력한 데이터가 추가되는 테이블 만들기

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="https://code.jquery.com/jquery-3.5.0.js" integrity="sha256-r/AaFHrszJtwpe+tHyNi/XCfMxYpbsRg2Uqn0x3s2zc=" crossorigin="anonymous"></script>
        <style>

            table{
                border: 1px solid black;
            }
            table td{
                border: 1px solid black;
            }
        </style>
        <script>
            $(function(){
                var index=1;
                $("#btn").on("click",function(){

                    var data_title = $(".input_title").val();
                    var data_contents = $(".input_contents").val();
                    var data_writer = $(".input_writer").val();

                    var tr = $("<tr></tr>")
                    tr.append("<td>"+index);
                    tr.append("<td>"+data_title);
                    tr.append("<td>"+data_contents);
                    tr.append("<td>"+data_writer);
                    $(".table").append(tr);
                    
                    index++;
                })
            })

        </script>
    </head>
    <body>
        <div>
            제목 : 
            <input type="text" class="input_title">
        </div>
        <div>
            내용 : 
            <input type="text" class="input_contents">
        </div>
        <div>
            작성자 : 
            <input type="text" class="input_writer">
        </div>
        <div>
            <input type="button" value="테이블에 추가" id="btn">
        </div>
        <table class="table">

            <tr>
                <td class="num">글번호</td>
                <td class="title">제목</td>
                <td class="contents">내용</td>
                <td class="writer">작성자</td>
            </tr>

        </table>

    </body>
</html>

                    var tr = $("<tr></tr>")
                    $(".table").append("<tr>");
                    tr.append("<td>"+index);
                    tr.append("<td>"+data_title);
                    tr.append("<td>"+data_contents);
                    tr.append("<td>"+data_writer);
                    $(".table").append(tr);

삭제 버튼 만들기

 

                $("#clear").on("click",function(){
                    var tds = $("td");
                    console.log(tds);
                })

remove

                $("#clear").on("click",function(){
                    var tds = $("td");
                    for(var i = o; i< tds.length;i++){
                        tds[i].remove();          
                    }
                })

제목까지 다 지워짐


제목 부분과 추가되는 부분 분리하기

 

$("#clear").on("click",function(){
                    var tds = $("tbody>tr");
                    for(var i = 0; i< tds.length;i++){
                        tds[i].remove();          
                    }
                })
        <table class="table">
            <thead>
                <tr>
                    <td class="num">글번호</td>
                    <td class="title">제목</td>
                    <td class="contents">내용</td>
                    <td class="writer">작성자</td>
                </tr>
            </thead>
            <tbody>

            </tbody>
        </table>

 

삭제버튼 추가 전체코드

더보기
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script src="https://code.jquery.com/jquery-3.5.0.js" integrity="sha256-r/AaFHrszJtwpe+tHyNi/XCfMxYpbsRg2Uqn0x3s2zc=" crossorigin="anonymous"></script>
        <style>

            table{
                border: 1px solid black;
            }
            table td{
                border: 1px solid black;
            }
        </style>
        <script>
            $(function(){
                var index=1;
                $("#btn").on("click",function(){

                    var data_title = $(".input_title").val();
                    var data_contents = $(".input_contents").val();
                    var data_writer = $(".input_writer").val();

                    var tr = $("<tr></tr>");
                    tr.append("<td>"+index);
                    tr.append("<td>"+data_title);
                    tr.append("<td>"+data_contents);
                    tr.append("<td>"+data_writer);
                    $("tbody").append(tr);

                    index++;
                })
                
                $("#clear").on("click",function(){
                    var tds = $("tbody>tr");
                    for(var i = 0; i< tds.length;i++){
                        tds[i].remove();          
                    }
                })
            })

        </script>
    </head>
    <body>
        <div>
            제목 : 
            <input type="text" class="input_title">
        </div>
        <div>
            내용 : 
            <input type="text" class="input_contents">
        </div>
        <div>
            작성자 : 
            <input type="text" class="input_writer">
        </div>
        <div>
            <input type="button" value="테이블에 추가" id="btn">
            <input type="button" value="Clear" id="clear">
        </div>

        <table class="table">
            <thead>
                <tr>
                    <td class="num">글번호</td>
                    <td class="title">제목</td>
                    <td class="contents">내용</td>
                    <td class="writer">작성자</td>
                </tr>
            </thead>
            <tbody>

            </tbody>
        </table>

    </body>
</html>

JQuery 기능과 자바스크립트 기능을 구분해야함

                    var tds = $("tbody>tr");

한개의 요소를 꺼낼때 그 요소는 자바스크립트 엘레먼트

remove는 자바스크립트 기능에 속한다.

                    for(var i = 0; i< tds.length;i++){
                        tds[i].remove();          
                    }

자바스크립트 엘리먼트의 경우 JQuery 기능이 먹히지 않는 경우도 있다.

그런 경우 $(tds[i]) 로 묶어줘야 기능 한다.


배열 상태의 제이쿼리 노드에 기능을 수행하면 모든 요소에 다 적용이 된다.

                $("#clear").on("click",function(){
                //자바스크립트는 반복문을 사용해야암
//                    var tds = $("tbody>tr");
//                    for(var i = 0; i< tds.length;i++){
//                        tds[i].remove();          
//                    }

//	제이쿼리는 전체에 기능 적용
                    $("tbody>tr").remove();
                })

append , prepend

만 바꿔도 삽입 위치 달라진다.

                $("#btn").on("click",function(){

                    var data_title = $(".input_title").val();
                    var data_contents = $(".input_contents").val();
                    var data_writer = $(".input_writer").val();

                    var tr = $("<tr></tr>");
                    tr.append("<td>"+index);
                    tr.append("<td>"+data_title);
                    tr.append("<td>"+data_contents);
                    tr.append("<td>"+data_writer);
                    $("tbody").prepend(tr);

                    index++;
                })

empty

자기자신 내부에 있는 후손과 자손을 지운다.

 

remove는 자기 자신을 지운다

                $("#clear").on("click",function(){
                    $("tbody").empty();
                })

동적 엘레먼트

프로그램 실행 이후 추가되는 데이터

 

동적 바인딩

동적 엘레먼트에 이벤트 부여