day16 具有增删改查基础功能的表格

不能重复ID和电话

CSS部分

 <style>
        table {
            width: 600px;
            border: 1px solid #000;
            text-align: center;
            border-collapse: collapse;
            border-spacing: 0px;
            text-align: center;

        }

        tr,
        th,
        td {
            border: 1px solid #000;
        }

        tbody input {
            width: 90%;
            border: none;
            outline: none;
        }

        input {
            outline: none;
        }
    </style>

html部分

<div>
        <p><input type="text" id="sId" placeholder="ID"></p>
        <p><input type="text" id="sName" placeholder="姓名"></p>
        <p><input type="text" id="sTel" placeholder="电话"></p>
        <p><button id="save">保存</button></p>
        <input type="text" id="txt">
        <button id="search">搜索</button>

        <table>
            <thead>
                <tr>
                    <th>id</th>
                    <th>电话</th>
                    <th>姓名</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody id="tab"></tbody>
        </table>
    </div>

JavaScript部分

<script>
        var oId = document.getElementById("sId");//ID
        var oName = document.getElementById("sName");//姓名
        var oTel = document.getElementById("sTel");//绑定电话

        var oTxt = document.getElementById("txt");//绑定search输入框
        var oSearch = document.getElementById("search");//search按钮

        var oSave = document.getElementById("save");//保存按钮
        var oTab = document.getElementById("tab");//表格


        //1.模拟一些初始数据,用来对比防止重复
        var data = [{
            id: 1,
            name: "刘德华",
            tel: 17485247895
        },
        {
            id: 2,
            name: "周星驰",
            tel: 17485247295
        }]
        //调用加载显示存储在data对象里面的函数
        loadData(data);
        //2.点击保存按钮,输入框的数据,做成一个对象,
        // 把该对象添加到模拟数据里
        oSave.onclick = function () {
            var obj = {
                id: oId.value,
                name: oName.value,
                tel: oTel.value
            }
            //在保存的时候,拿 obj里的id与 模拟数据里的id继续比较
            //id与电话号码不能重复
            var isReg = data.some(function (item) {
                return item.id == obj.id || item.tel == obj.tel;
            })
            //判断isReg
            if (isReg) {
                return;
            }
            data.push(obj);
            loadData(data);
        }
        //3.把加载的数据显示出来
        function loadData(arr) {
            //判断输入的数据是否为数组格式
            if (!Array.isArray(arr)) {
                return;
            }
            var strHtml = "";
            arr.forEach(function (item) {
                strHtml += `
                <tr>
                    <td>${item.id}</td>
                    <td>${item.name}</td>
                    <td>${item.tel}</td>
                    <td>
                        <a href="javascript:void(0)" onclick=del(this,${item.id})>删除</a>
                        <a href="javascript:void(0)" onclick=edit(this,${item.id})>编辑</a>
                        <a href="javascript:void(0)" style="display:none" onclick=save(this,${item.id})>保存</a>
                        
                    </td>
                `
            });
            oTab.innerHTML = strHtml;
        }
        //4.定义删除函数
        function del(o, id) {
            //1.//1.先根据id找出模拟数据里的 对应数据
            var findIndex = -1;
            data.forEach(function (item, index) {
                if (item.id == id) {
                    findIndex = index;
                }
            })
            //根据下标删除
            data.splice(findIndex, 1);
            //删除页面结构tr
            o.parentNode.parentNode.remove();
        }
        //5.定义一个搜索功能
        oSearch.onclick = function () {
            //1.先获取到搜索输入框的值
            var strName = oTxt.value;
            //2.拿strName 与模拟的数据,进行过滤
            var newData = data.filter(function (item) {
                return item.name.indexOf(strName) != -1;
            })
            //加载显示的数据,innerHTML会覆盖之前的数据
            loadData(newData)
        }
        //6.定义一个编辑功能 函数
        function edit(o, id) {
            o.style.display = "none";
            //edit的a标签下一个标签保存显示出来,加上括号就不用重新定义一个对象赋值
            (o.nextElementSibling || o.nextSibling).style.display="inline-block";
             // 拿到用户名的td里头 插入一个input
            //先取值 刘德华
            var strName=o.parentNode.parentNode.children[1].innerText;
            //把刘德华放入到一个 输入框里,在把输入框插入到 第2个td里
            o.parentNode.parentNode.children[1].innerHTML=`<input value=${strName}>`;

            //取出电话号码
            var strTel=o.parentNode.parentNode.children[2].innerText;
            o.parentNode.parentNode.children[2].innerHTML=`<input value=${strTel}>`;
        }

        //保存 功能函数定义
        function save(o,id){
            o.style.display="none";//save的a隐藏
            //edit的a显示
            (o.previousElementSibling||o.previousSibling).style.display="inline-block";
            // 1.根据id找到下标,在于对应下标的地方,把输入的值,覆盖模拟数据里某对象的数据
            var findIndex=-1;
            data.forEach(function(item,index){
                if(item.id==id){
                    findIndex=index;
                }
            })
            data[findIndex].name=o.parentNode.parentNode.children[1].children[0].value;
            data[findIndex].tel=o.parentNode.parentNode.children[2].children[0].value;
            //把输入的内容,利用innerHTML 覆盖原来的 input框
            o.parentNode.parentNode.children[1].innerHTML=data[findIndex].name;
            o.parentNode.parentNode.children[2].innerHTML=data[findIndex].tel;
        }

    </script>
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容