js 動態生成表格案例


<1>布局:一個table表格,表格分為兩個部分,上面是thead表頭,表頭里面僅一行,有4列(th),   下面是tbody表格內容,要求tbody中的每一行都是用js動態創建的

<body>
<table>
    <thead>
        <tr>
            <th>姓名</th>
            <th>科目</th>
            <th>成績</th>
            <th>操作</th>
        </tr>
    </thead>

    <tbody>

    </tbody>
</table>
</body>

<2>樣式

<style>
        *{
            padding:0;
            margin:0;
        }
        table{
            width:500px;
            margin:100px auto;
            border-collapse:collapse;/*邊框合並模式*/
            text-align:center;
        }
        td,th{  /*td是后面tbody中動態創建的單元格,th是thead里面那一行中的單元格*/
            border:1px solid #333;
        }
        thead tr{
            height:40px;
            background-color: #cccccc;
        }

<3>js動態創建表格:

    第一步:先准備數據,一共有三個人的成績,作為三個對象放進數組中

 var datas=[{
        name:"",
        subject:"javascript",
        score:100
    },{
        name:"",
        subject:"javascirpt",
        score:99
    },{
        name:"",
        subject:"javascript",
        score:98
    }];

     第二步:在tbody里面創建每一行,行數就等於datas數組的長度,有幾個人的成績就有幾行

for(var i=0;i<datas.length;i++)
{
   var tr=document.createElement("tr");
   tbody.appendChild(tr);  
}

   第三步:在已經創建好的行 tr 中,創建單元格, 注意是跟數據有關的三個單元格,td單元格的數量取決於datas[ ] 數組中每個對象的屬性個數

for(var i=0;i<datas.length;i++)
{
   var tr=document.createElement("tr");
   tbody.appendChild(tr);
      for(var k in datas[i])
        {
               var td=document.createElement("td");
               tr.appendChild(td);
               td.innerHTMl=datas[i][k]; 
        }
}            

           這里用for循環遍歷數組 , k得到的是屬性名,obj[k]得到的是屬性值

    for( var k in obj) {

    }

  第四步:在每一行里面創建有刪除二字的單元格:

for(var i=0;i<datas.length;i++)
{
   var tr=document.createElement("tr");
   tbody.appendChild(tr);
    for(var k in datas[i])
   {
       var td=document.createElement("td");
       tr.appendChild(td);
       td.innerHTML=datas[i][k];
   }
    var td=document.createElement("td");
    tr.appendChild(td);
    td.innerHTML="<a href="javascript:;">刪除</a>" ;
} 

   第五步:刪除操作,點擊“刪除”,所點擊的那一行就會被刪除

var as=document.querySelectorAll("a");
for(var i=0; i<as.length;i++)
{
   as[i].onclick=function()
   {
     tbody.removeChild(this.parentNode.ParentNode);
   }
}

全部完整代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            padding:0;
            margin:0;
        }
        table{
            width:500px;
            margin:100px auto;
            border-collapse:collapse;/*邊框合並模式*/
            text-align:center;
        }
        td,th{
            border:1px solid #333;
        }
        thead tr{
            height:40px;
            background-color: #cccccc;
        }
    </style>
</head>
<body>
<table>
    <thead>
        <tr>
            <th>姓名</th>
            <th>科目</th>
            <th>成績</th>
            <th>操作</th>
        </tr>
    </thead>

    <tbody>

    </tbody>
</table>
</body>
</html>
<script>
    //1,先准備數據
    var datas=[{
        name:"",
        subject:"javascript",
        score:100
    },{
        name:"",
        subject:"javascirpt",
        score:99
    },{
        name:"",
        subject:"javascript",
        score:98
    }];
    //2,往tbody里面創建行,有幾個人(通過數組的長度)我們就創建幾行
    var tbody=document.querySelector("tbody");
    for(var i=0;i<datas.length;i++)  //外面的for循環 是 行tr
    {
        var tr=document.createElement("tr");
        tbody.appendChild(tr);
        //3,往tr每一行里面創建單元格(跟數據有關系的3個單元格),td單元格的數量取決於每個對象的屬性個數 for循環遍歷對象 datas[i]
        for(var k in datas[i])   //里面的for循環是 列
        {
            var td=document.createElement("td");  //創建單元格
            tr.appendChild(td);
            td.innerHTML=datas[i][k]; //把對象里面的屬性值 datas[i][k]給td
        }
        //4,創建有刪除二字的單元格
        var td=document.createElement("td");
        tr.appendChild(td);
        td.innerHTML="<a href='javascript:;'>刪除</a>";
    }

    //5,刪除操作
    var as=document.querySelectorAll("a");
    for(var i=0;i<as.length;i++)
    {
        as[i].onclick=function () {  //點擊a 刪除 當前a 所在的行(a鏈接的爸爸的爸爸)
            tbody.removeChild(this.parentNode.parentNode);
        }
    }
</script>

關鍵代碼:

1,var  datas=[{ }, { }, { }] ;  用數組准備數據

2,行數是通過數組的長度創建(datas.length),包含數據的列數是根據數組中每個對象的屬性的個數創建 (datas[i] ) , 都是通過for循環遍歷,外面的for循環遍歷行,里面的for循環遍歷列,從而創建單元格

3,td.innerHTML=datas[i][k];   把數組中每個對象的每個屬性值依次賦給單元格 td

4,最后一列的所有“刪除”的單元格單獨創建,也是根據行數創建

5,td.innerHTML="<a href='javascript:;'>刪除</a>";     href屬性等於“javascript:;” ,可以避免頁面跳轉

6,tbody.removeChild(this.parentNode.parentNode;   刪除操作中是tbody需要刪除某一個孩子(某一行),表示為當前點擊的a鏈接所在單元格的所在行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM