码迷,mamicode.com
首页 > Web开发 > 详细

原生JS操作table表格:修改表格内容,添加删除行、列,获取表格数据

时间:2020-06-30 20:33:09      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:inpu   maxwidth   pac   har   width   elements   child   set   classlist   


 

 

demo源码下载:点击下载

 


 

 

index.html页面内容:

<script src="./xmsbTable.js" type="text/javascript" charset="utf-8"></script>

<table id="table" border="1" cellspacing="0" cellpadding="5" height="100">
    <tr>
        <th width="100">A</th>
        <th width="100">A</th>
        <th width="100">A</th>
    </tr>
    <tr>
        <td>xmsb</td>
        <td>xmsb</td>
        <td>xmsb</td>
    </tr>
    <tr>
        <td>xmsb</td>
        <td>xmsb</td>
        <td style="background:black; color: white;">xmsb</td>
    </tr>
</table>

<br>

<button onclick="xmsbTable_createRow(‘table‘)">添加行</button>
<button onclick="xmsbTable_createCol(‘table‘)">添加列</button>

<br><br>

<button onclick="xmsbTable_deleteRow(‘table‘, 2)">删除第二行</button>
<button onclick="xmsbTable_deleteCol(‘table‘, 3)">删除第三列</button>

<br><br>

<button onclick="console.log(xmsbTable_getTable(‘table‘))">获取表格数据</button>

<script type="text/javascript">
    xmsbTable_editTable("table");
</script>

 


 

 

xmsbTable.js内容:

window.xmsbTable_editTable = function(domId)
{
    var table = document.getElementById(domId);
    table.editTableInit = true;
    
    var tds = table.getElementsByTagName(‘td‘);
    for(var i = 0; i < tds.length; i ++)
    {
        tds[i].onclick = init;
    }
    
    var ths = table.getElementsByTagName(‘th‘);
    for(var i = 0; i < ths.length; i ++)
    {
        ths[i].onclick = init;
    }
    
    function init()
    {
        if(!this.classList.contains(‘editTable-Input‘))
        {
            var currentStyle = window.getComputedStyle(this);
            this.style.maxWidth = currentStyle.width;
            this.classList.add(‘editTable-Input‘);
            
            var value = this.innerHTML;
            var style = "                color:" + currentStyle.color + ";                 width:" + currentStyle.width + ";                 height:" + currentStyle.height + ";                 font-size:" + currentStyle.fontSize + ";                 border: none; background: none; outline: none;";
            var input = "<input type=‘text‘ value=‘"+ value +"‘ style=‘" + style + "‘>";
            
            this.innerHTML = input;
            this.children[0].focus();
            this.children[0].onblur = function()
            {
                var editTd = this.parentNode;
                editTd.innerHTML = this.value.trim() || ‘‘;
                editTd.classList.remove(‘editTable-Input‘);
            }
        }
    }
}

window.xmsbTable_createRow = function(domId)
{
    var table = document.getElementById(domId);
    
    var cols = table.rows[table.rows.length - 1].cells;
    var newRow = document.createElement("tr");
    
    for(var i = 0; i < cols.length; i ++)
    {
        newRow.innerHTML += cols[i].outerHTML;
    }
    
    for(var i = 0; i < newRow.children.length; i ++)
    {
        newRow.children[i].innerHTML = ‘&emsp;‘;
    }
    
    var parent = cols[0].parentNode.parentNode;
    parent.appendChild(newRow);
    
    if(table.editTableInit == true)
    {
        xmsbTable_editTable(domId);
    }
}

window.xmsbTable_createCol = function(domId)
{
    var table = document.getElementById(domId);
    
    var rows = table.rows;
    
    for(var i = 0; i < rows.length; i ++)
    {
        var cols = rows[i].children;
        
        var newCol = document.createElement(cols[cols.length - 1].tagName);
        
        for(var ii = 0; ii < cols[cols.length - 1].attributes.length; ii ++)
        {
            newCol.setAttribute(cols[cols.length - 1].attributes[ii].name, cols[cols.length - 1].attributes[ii].value);
        }
        
        for(var ii = 0; ii < cols[cols.length - 1].style.length; ii ++)
        {
            newCol.style[ii] = cols[cols.length - 1].style[ii];
        }
        
        newCol.innerHTML = ‘‘;
        
        var tr = rows[i];
        tr.appendChild(newCol);
    }
    
    if(table.editTableInit == true)
    {
        xmsbTable_editTable(domId);
    }
}

window.xmsbTable_deleteRow = function(domId, rowNum)
{
    var table = document.getElementById(domId);
    var rows = table.rows;
    
    if(rowNum <= 0 || rowNum > rows.length)
    {
        console.error("第" + rowNum + "行数据不存在,无法删除");
        return false;
    }
    
    rows[0].parentNode.removeChild(rows[rowNum - 1]);
}

window.xmsbTable_deleteCol = function(domId, colNum)
{
    var table = document.getElementById(domId);
    var cols = table.rows[table.rows.length - 1].cells;
    
    if(colNum <= 0 || colNum > cols.length)
    {
        console.error("第" + colNum + "列数据不存在,无法删除");
        return false;
    }
    
    for(var i = 0; i < table.rows.length; i ++)
    {
        table.rows[i].removeChild(table.rows[i].children[colNum - 1]);
    }
}

window.xmsbTable_getTable = function(domId)
{
    var table = document.getElementById(domId);
    
    var result = [];
    result[‘dom‘] = table;
    result[‘content‘] = [];
    
    for(var i = 0; i < table.rows.length; i ++)
    {
        result[‘content‘][i] = [];
        
        for(var ii = 0; ii < table.rows[i].children.length; ii ++)
        {
            result[‘content‘][i][ii] = table.rows[i].children[ii].innerHTML.trim();
        }
    }
    
    return result;
}

原生JS操作table表格:修改表格内容,添加删除行、列,获取表格数据

标签:inpu   maxwidth   pac   har   width   elements   child   set   classlist   

原文地址:https://www.cnblogs.com/XiaoMingBlingBling/p/13215411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!