JS table表格 新增 删除

table表格_新增

<style>
        table{
            border-collapse: collapse;
        }

        table td{
            width: 100px;
            line-height: 30px;
            border: 1px solid #000;
            text-align: center;
        }
    </style>
</head>
<body>
    姓名: <input type="text"><br>
    年龄: <input type="number"><br>
    性别:<input type="radio" value="男" name="sex"><input type="radio" value="女"  name="sex">
         保密<input type="radio" value="保密" name="sex"><br>
    城市: <select >
            <option value="北京">北京</option>
            <option value="上海">上海</option>
            <option value="广州">广州</option>
            <option value="重庆">重庆</option>
            <option value="天津">天津</option>
          </select><br>
    <button>新增</button>

    <table>
        <thead>
            <tr>
                <td>序号</td>
                <td>姓名</td>
                <td>年龄</td>
                <td>性别</td>
                <td>城市</td>
            </tr>
        </thead>
        <tbody></tbody>
    </table>

    <script>    
        // 建立数组,模拟数据库的数据
        var arr = [
            {name:'张三',age:18,sex:'男',city:'北京'},
            {name:'李四',age:19,sex:'女',city:'上海'},
            {name:'王五',age:20,sex:'男',city:'广州'},
            {name:'赵六',age:21,sex:'女',city:'重庆'},
            {name:'刘七',age:22,sex:'保密',city:'天津'},
        ];

        // 获取table表格中tbody标签对象
        var oTb = document.querySelector('tbody');
        // 获取button按钮标签对象
        var oBtn = document.querySelector('button');

        // 给tbody写入内容
        oTb.innerHTML = setTab();

        // 点击button按钮,新增数据操作
        oBtn.onclick = function(){
            // 1,需要先获取input等标签中,写入的数据

            // input标签,获取数据是通过标签对象的value属性
            // document.querySelector('[type="text"]')  获取标签对象
            // document.querySelector('[type="text"]').value  获取标签对象,value的数据
            
            // 获取姓名的数据
            var oIptName = document.querySelector('[type="text"]').value;

            // 获取年龄的数据
            var oIptAge =  document.querySelector('[type="number"]').value;

            // 获取单选标签,是一个数组
            // 如果被选中的标签,checked属性值是true,没有选中的checked属性值是false
            var oIptSex = document.querySelectorAll('[type="radio"]');

            // 将变量定义在函数之外,是一个全局变量,这样函数之外就可以使用
            // 定义变量,存储的是性别的数据
            var oIptSexVal = 0;

            // 获取数据,要循环遍历,如果 checked属性值是true,获取这个标签的value属性值
            oIptSex.forEach(function(item){
                // 如果标签 checked 属性,属性值是true,证明是被选中的标签
                // 要获取value属性的属性值
                if(item.checked === true ){
                    // 获取当前这个item标签,value的属性值
                    // 在函数之内对这个变量进行赋值
                    oIptSexVal = item.value;
                    // 如果将变量定义在函数之内,只能在函数之内调用
                }
            })
            
            // select和option标签,配合使用
            // 选中option,所表示的数据,会定义在select标签的value属性上
            var oIptCity = document.querySelector('select').value;

            // 将数据写成一个对象的形式,与数组中存储的对象是相同的形式
            var obj = {
                name: oIptName ,
                age: oIptAge ,
                sex: oIptSexVal ,
                city:oIptCity
            };

            // 将这个对象,写入到数组中
            arr.push(obj);

            // 根据新的数组,重新渲染页面
            // 调用函数,生成新的页面内容
            oTb.innerHTML = setTab();
 
        } 
        // 设定函数,生成table表格内容

        function setTab(){
            // 定义空字符串,存储拼接结果
            var str = '';

            arr.forEach(function( item , key ){
                // 1,拼接tr起始标签
                str += '<tr>';
                // 2,拼接序号单元格,单元格内容是索引+1
                str += `<td>${key+1}</td>`;
                // 3,循环拼接内容单元格
                // 此时内容的是一个对象,item中存储的是一个对象
                // 对象的循环,只能使用 for...in
                for(var k in item){
                    str += `<td>${item[k]}</td>`;
                }
                // 4,拼接tr结束标签
                str += '</tr>';
                
            })

            // 定义 字符串为 函数的返回值

            return str; 
        }
总结思路:
  1. 获取标签对象中,对应的数据信息
    input,text,password,number等等,输入框,包裹textarea文本域
    输入的数据,都是存储在 value属性中的
    标签对象.value 就可以获取到标签value属性中存储的数据,也就是输入的内容
    select>option 定义数据是在option中,定义的option标签的value属性
    option和select是配合使用的,最终,你选定的option的数据
    会记录在select标签,value属性中
    select标签对象.value 获取的是下拉列表框中,选定的数据的属性值
    radio 定义标签的value属性,以及对应的属性值
    标签的checked 属性 如果是 true 表示是被选中的标签
    标签对象.checked 获取属性对应的属性值
    如果 checked 属性值 是 true 表示这个标示是被单选选中的标签
    就获取这个标签的数据,这个标签的数据是value属性中存储的数据
    标签对象.value 获取属性值
  2. 将这些数据信息,也称对象的形式,对象中的格式,与数组中定义的对象格式必须一致
  3. 将新建立的对象,也就是新的数据信息,写入到数组中
  4. 重新调用函数,根据新的数组,生成新的字符串,写入到tbody中; 之前写的内容,就会被覆盖掉,重新生成新的内容.

table表格删除

<style>
        table{
            border-collapse: collapse;
        }

        table td{
            width: 100px;
            line-height: 30px;
            border: 1px solid #000;
            text-align: center;
        }
    </style>
</head>
<body>
    姓名: <input type="text"><br>
    年龄: <input type="number"><br>
    性别:<input type="radio" name="sex" value="男"><input type="radio" name="sex" value="女">
          保密 <input type="radio" name="sex" value="保密"><br>
    城市: <select>
            <option value="北京">北京</option>
            <option value="上海">上海</option>
            <option value="广州">广州</option>
            <option value="重庆">重庆</option>
            <option value="天津">天津</option>
         </select><br>
    <button name="add">新增</button>

    <table>
        <thead>
            <tr>
                <td>序号</td>
                <td>姓名</td>
                <td>年龄</td>
                <td>性别</td>
                <td>城市</td>
                <td>删除</td>
            </tr>
        </thead>
        <tbody></tbody>
    </table>

    <script>
        // 建立数组,模拟数据库的数据
        var arr = [
            {name:'张三',age:18,sex:'男',city:'北京'},
            {name:'李四',age:19,sex:'女',city:'上海'},
            {name:'王五',age:20,sex:'男',city:'广州'},
            {name:'赵六',age:21,sex:'女',city:'重庆'},
            {name:'刘七',age:22,sex:'保密',city:'天津'},
        ];

        // 获取table中的tbody标签
        var oTb = document.querySelector('tbody');

        var oBtn = document.querySelector('[name="add"]');

        // 不能在函数之外执行生成页面操作了
        // oTb.innerHTML = setTab();

        // 调用函数,生成页面
        // 在函数内部就有生成页面的操作
        // 将之前的 oTb.innerHTML = setTab();
        // 都直接改成  setTab(); 在函数内部,就完成生成页面操作
        setTab();

        
        // button按钮添加点击事件
        oBtn.onclick = function(){
            // 1,获取数据

            // 获取姓名  对应input标签,value属性值
            var oIptName = document.querySelector('[type="text"]').value;
            // 获取年龄  对应input标签,value属性值
            var oIptAge = document.querySelector('[type="number"]').value;
            // 获取城市  对应select标签,value属性值
            var oIptCity = document.querySelector('select').value;

            // 获取性别的三个radio单元框标签,是一个伪数组
            var oIptSex = document.querySelectorAll('[type="radio"]');
            // 定义变量,存储获取数据结果
            var oIptSexVal = 0; 

            // 循环3个radio单元框伪数组,item存储的就是radio单选框标签
            oIptSex.forEach(function(item){
                // 如果 radio单选框标签,checked属性值是 true,表示是被选中的标签
                if(item.checked === true){
                    // 获取这个标签的value属性值
                    oIptSexVal = item.value;
                }
            })

            // 建立对象,结构与arr中的对象结构一直
            var obj = {
                name:oIptName , 
                age:oIptAge ,
                sex:oIptSexVal ,
                city: oIptCity,
            }

            // 将对象写入到数组中
            arr.push(obj);

            // 调用生成页面函数,也就会根据新的数组,渲染生成新的页面
            // 同时函数中会调用,添加删除效果函数,也同时给新的删除标签,重新绑定删除效果
            setTab();
        }
         
        // 定义生成table表格的函数
        function setTab(){
            var str = '';
            arr.forEach(function(item , key){
                str += '<tr>';
                str += `<td>${key+1}</td>`;
                for(var k in item){
                    str += `<td>${item[k]}</td>`;
                }
                // 拼接删除单元格
                // 给删除标签,添加属性,属性值是当期这条数据对应的索引数值
                // 自定义属性,随便你写什么都行,跟别任何内容都没有关系
                str += `<td> <button index="${key}">删除</button> </td>`
                str += '</tr>';
                
            });

            // 将生成页面的操作,定义在函数中
            oTb.innerHTML = str;

            // 生成页面之后,有了删除标签之后,执行给删除标签绑定事件的函数
            // 给删除标签绑定事件
            // 之后只要是重新调用渲染生成页面的setTab()函数
            // 就会调用 给删除标签绑定事件函数
            del();

        }

        // 给删除标签,添加事件,实现功能效果
        function del(){
            // 给删除button添加事件,循环遍历添加

            // 1,获取标签对象
            // 获取 tbody中的botton 按钮,与新增button不冲突
            // 获取结果是所有删除button标签的伪数组
            var oBtns = document.querySelectorAll('tbody button');

            // 2,循环遍历伪数组,item中存储的是就是 删除标签对象
            oBtns.forEach(function(item){
                // 给删除标签,添加点击事件
                item.onclick = function(){
                    // 1,获取删除标签上,自定义属性的属性值
                    var index = item.getAttribute('index');

                    // 2,根据属性值,也就是需要 删除数组单元的索引,进制删除数组的操作
                    // 从这个索引开始,删除一个单元
                    arr.splice(index , 1);

                    // 3,删除之后生成了新的数组单元
                    // 根据新的数据单元,生成页面
                    // 同时也会重新 调用给删除标签绑定事件的函数本身
                    setTab();
                }
            })
        }
总结:思路
  1. 定义全局作用域变量
    tbody标签对象 数组arr 新增button按钮

  2. 调用生成table表格函数,生成页面;
    setTab();

  3. 给新增button按钮,添加事件
    标签.onclick = funciton(){}
    获取数据,姓名,年龄,性别,城市
    将四个数据,生成对象,对象的解构与arr数组中的对象,结构一致
    将生成的对象,新增写入到arr数组中
    根据新的数组,再重新渲染,生成table表格
    调用生成table表格的函数 setTab()

  4. 定义生成table表格函数 setTab函数
    定义变量,赋值空字符串,存储拼接生成的字符串内容
    循环遍历数组arr 第一个参数存储数据单元的数值,也就是对象,第二个参数存储数据单元对应的索下标
    拼接 tr 起始标签
    拼接 序号单元格 内容是 数据单元,也就是对象对应的索引下标,第二个参数+1
    循环遍历 对象 也就是第一个参数存储的数据单元的数值
    对象,只能使用for…in循环 自定义变量存储的是对象的属性
    拼接 内容单元格 内容是 对象属性存储的属性值 也就是 item[自定义变量]
    拼接 删除单元格 内容是 button按钮
    给button按钮,添加自定义属性,属性名称是任意名称都行
    属性值是 对象对应的索引下标 也就是循环arr时 forEach() 的第二个参数
    拼接 tr结束标签
    将字符串写入到tbody标签中
    调用 给 删除标签,添加事件函数
    de()
    说明:因为我们给删除标签添加事件,必须要和渲染生成页面一起执行
    每次渲染生成页面,都要给button标签,添加删除事件,因此,这两个操作,必须要绑定执行
    我们把这两个操作,都写在渲染生成页面的函数中

  5. 定义函数,给button标签,添加删除效果 del函数
    获取所有需要添加事件的button按钮,是一个数组
    forEach()循环遍历这个数组 , 第一个参数,就是button按钮标签
    获取button标签,自定义属性的属性值
    按照属性值,执行删除数组单元的操作
    arr.splice(属性值 , 1)
    根据新的数组,渲染生成新的table表格
    再次调用生成table表格函数 setTab();

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值