2009. 10. 23. 17:00

테이블 동적 생성


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>Untitled Document</title>
        <script type=text/javascript src="http://www.prototypejs.org/javascripts/prototype.js"></script>
        <script>
            //전체 행렬 개수 지정
            var br = 3;
            var bc = 3;
           
            function crtable(){
           
                var attr = {border:0,ceppspacing:2,id:'dtable',unselectable:'on'};
                var style = {cursor:'pointer',background:'#c0c0c0'};
                var tbl = createTag('table',attr,style);
               
                var tbody = document.createElement('tbody');
                for(i=0;i<br;i++)
                {
                    var attr = {id:'tr'+i,height:10};
                    var tr = createTag('tr',attr);
                    for(j=0;j<bc;j++)
                    {
                        var tdattr = {id:'td'+i+j, onmouseover:'addCell(this)'};
                        var tdstyle = {width:'20px',height:'20px',background:'#fff'};
                        var td = createTag('td',tdattr, tdstyle);
                        td.innerHTML = '&nbsp;'+j;
                        tr.appendChild(td);
                    }
                    tbody.appendChild(tr);
                }
                tbl.appendChild(tbody);
                $$('body')[0].appendChild(tbl);
            }
           
            function addCell(cell)
            {
                /* r,c - 현재 마우스가 올라와 있는 셀의 위치값 r : Row, c - Cell */
                var r = cell.parentNode.rowIndex + 1;
                var c = cell.cellIndex + 1;
                /* ar, ac - 전체 테이블의 행,열의 값 */
                ar = cell.parentNode.parentNode.rows.length;
                ac = cell.parentNode.cells.length;
               
                /* 열  추가 */
                if(c >= ac){
                    var tr = cell.parentNode.parentNode.firstChild;//insertCell(c);
                    for (i = 0; i < ar; i++) {
                        var nc = tr.insertCell(ac);
                        nc.innerHTML = '&nbsp;' + c;
                        nc.style.background = '#fff';
                        nc.style.width = '20px';
                        nc.style.height = '20px';
                        nc.setAttribute('onmouseover', 'addCell(this)');
                        tr = tr.nextSibling;
                    }
                }
               
                /* 행 추가 */
                if(r >= ar)
                {
                    cell.parentNode.parentNode.insertRow(r);
                    var tr = cell.parentNode.nextSibling;
                    for(i=0;i<ac;i++)
                    {
                        var nc = tr.insertCell(i);
                        nc.innerHTML = '&nbsp;' + r;
                        nc.style.background = '#fff';
                        nc.style.width = '20px';
                        nc.style.height = '20px';
                        nc.setAttribute('onmouseover', 'addCell(this)');
                       
                    }
                }
               
                /* 열 삭제 */
                if(ac > bc && (ac - c >= 2))
                {
                    var tr = cell.parentNode.parentNode.firstChild;
                    for (i = 0; i < ar; i++) {
                        for (j = ac; j > c+1; j--) {
                            tr.deleteCell(j-1);
                        }
                        tr = tr.nextSibling;
                    }
                }
               
                /* 행 삭제 */
                if(ar > br && (ar - r >= 2))
                {
                    var tbody = cell.parentNode.parentNode;
                    for(i=ar;i>r+1;i--)
                    {
                        tbody.deleteRow(i-1);
                    }
                }
            }
           
            function createTag(tag, attr, style)
            {
                var ctag = document.createElement(tag);
                for(var prop in attr){
                    ctag.setAttribute(prop,attr[prop]);
                }
                Element.setStyle(ctag,style);
                return ctag;
            }
            function toggleTable()
            {
                if($('dtable'))
                {
                    Element.remove('dtable');   
                } else {
                    crtable();
                }
               
            }
        </script>
    </head>
    <body>
        <button onclick="toggleTable();" >table</button>
    </body>
</html>