javascript药物增删改查模糊检索

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        body {
            background: url('./2ca5a7926fd8a195dc19bc2fef6b0a0.png');
            background-repeat: no-repeat;
            background-size: cover;
            font-family: '宋体';
        }

        a {
            text-decoration: none;
        }

        .box .s {
            position: absolute;
            top: 1%;
            left: 0%;
            text-align: left;
            padding-left: 10px;
        }

        h2 {
            font-size: 36px;
            font-family: '宋体';
        }

        .box {
            position: relative;
            width: 880px;
            height: 700px;
            background-color: rgba(255, 255, 255, 0.5);
            margin: 0 auto;
            text-align: center;
        }

        .content {
            display: flex;
            justify-content: space-around;
        }

        .content .left {
            width: 165px;
        }

        table {
            width: 666px;
            height: 25px;
            font-size: 20px;
        }
    </style>
</head>

<body>
    <div class="box">

        <head>
            <h2>药草系统</h2>
            <div class="s">
                <label>名称:</label><input type="text" class="searchUname"><button class="search">查询</button>
            </div>
        </head>
        <div class="content clearfix">
            <form class="left">
                <label>名称:</label>
                <input type="text" class="uname hx"> 价格:
                <input type="text" class="uid hx"> 药效:
                <input type="text" class="sex hx"> 年份:
                <input type="text" class="age hx">
                <input type="button" class="add" value="添加">
            </form>
            <table border="1" cellspacinbg="0">
                <thead>
                    <th>序号</th>
                    <th>名称:</th>
                    <th>价格:</th>
                    <th>药效:</th>
                    <th>年份:</th>
                    <th>操作</th>
                </thead>
                <tbody>
                </tbody>
            </table>
        </div>
    </div>
    <script>

        var num = 1; //自增序号
        var data = []; //存储数据(类似于数据库)
        var uname = document.querySelector('.uname'); //姓名输入框元素
        var uid = document.querySelector('.uid'); //输入框元素
        var sex = document.querySelector('.sex'); //输入框元素
        var age = document.querySelector('.age'); //输入框元素
        var btn = document.querySelector('.add'); //输入框元素
        var tbody = document.querySelector('tbody'); //表主体元素
        var search = document.querySelector('.search'); //按钮查询
        var searchUname = document.querySelector('.searchUname'); //按钮查询前的输入框元素
        var flag = false; //判断添加按钮是添加状态还是编辑状态
        btn.onclick = function () {
            if (flag) { //如果flag为true说明在编辑状态
                var obj = {
                    uname: uname.value,
                    uid: uid.value,
                    sex: sex.value,
                    age: age.value
                };
                update(obj);
                uid.removeAttribute('readonly');
                load();
            } else if (uname.value.trim() == '' || uid.value.trim() == '' || sex.value.trim() == '' || age.value.trim() == '') { //判断数据不能为空
                alert('数据不能为空');
            } else {
                if (check(uid.value)) { //检查是否有相同的
                    data.push({
                        uname: uname.value,
                        uid: uid.value,
                        sex: sex.value,
                        age: age.value
                    });
                    var arr = [uname.value, uid.value, sex.value, age.value]; //创建一个临时数组为了方便赋值
                    var tr = document.createElement('tr');
                    tr.style.height = 25 + 'px';//每次创建25px高度的tr
                    tbody.appendChild(tr);
                    tr.setAttribute('index', num);
                    var xh = document.createElement('td');
                    xh.innerHTML = num++;
                    tr.appendChild(xh);
                    for (var i = 0; i < 5; i++) {
                        if (i == 4) { //判断是否到操作这个单元格
                            var td = document.createElement('td');
                            td.innerHTML = '<a href="javascript:;" class="del">删除</a> <a href="javascript:;" class="edit">编辑</a><a href="javascript:;" class="up">↑</a><a href="javascript:;" class="down">↓</a>';
                        } else {
                            var td = document.createElement('td');
                            td.innerHTML = arr[i];
                            td.className = 'nr';//给每个新创建的td添加类名
                        }

                        tr.appendChild(td);
                    }
                    binding(); //给删除编辑a标签绑定事件

                } else {
                    alert('不能添加相同价格的数据');
                }
            }
        };
        // 检查是否有相同
        function check(uid) {
            if (data.length < 1) return true;//如果原数据数组为空直接返回true
            for (var i = 0; i < data.length; i++) {
                if (data[i].uid === uid) {
                    return false;
                }
            }
            return true;
        }
        //给a标签里的删除编辑绑定事件
        function binding() {
            //为删除绑定数据
            var dels = document.querySelectorAll('.del');
            for (var i = 0; i < dels.length; i++) {
                dels[i].onclick = function () {
                    uid.removeAttribute('readonly');
                    flag = false;
                    if (confirm('确认删除?')) {//如果点的是确定
                        var id = this.parentNode.previousSibling.previousSibling.previousSibling;//获取当前行的
                        del(id.innerHTML);//del()是自己封装的一个方法
                        load();//自己封装的重新加载数据的方法
                    }
                }
            }
            //下为编辑绑定事件
            var edits = document.querySelectorAll('.edit');//获取所有编辑a标签
            for (let i = 0; i < edits.length; i++) {//为所有编辑绑定点击事件
                edits[i].onclick = function () {
                    var four = this.parentNode.previousSibling;//获取这个td元素
                    var three = this.parentNode.previousSibling.previousSibling;//获取这个td元素
                    var two = this.parentNode.previousSibling.previousSibling.previousSibling;//获取这个td元素
                    var one = this.parentNode.previousSibling.previousSibling.previousSibling.previousSibling;//获取这个td元素
                    //回显到左边输入框
                    uname.value = one.innerHTML;
                    uid.value = two.innerHTML;
                    sex.value = three.innerHTML;
                    age.value = four.innerHTML;
                    var id = two.innerHTML;
                    uid.setAttribute('readonly', 'readonly');//为设置只读属性
                    flag = true;//当前添加按钮现在为更新状态
                    var nrs = this.parentNode.parentNode.querySelectorAll('.nr');//获取当行所有的类名带有nr的元素
                    for (var j = 0; j < nrs.length; j++) {
                        var temp = nrs[j].innerHTML;//先用一个中间变量存储当前td里的内容
                        nrs[j].innerHTML = '<input type="text"/>';//把td里的内容变成一个input
                        nrs[j].children[0].value = temp;//给input一开始存储的td内容
                        if (j == 1) {
                            nrs[j].children[0].setAttribute('readonly', 'readonly');
                        }
                    }
                    var hxs = document.querySelectorAll('.hx');
                    for (let k = 0; k < nrs.length; k++) {
                        nrs[k].children[0].onchange = function () {
                            hxs[k].value = nrs[k].children[0].value;
                        }
                    }
                    nrs[0].children[0].focus();
                    this.innerHTML = '更新';
                    this.className = 'renew';
                    renewdata();//自己封装更新数据的方法
                    return;
                }
            }
        };
        function load() {
            tbody.innerHTML = '';//清空tBody元素里的所有内容
            num = 1;//自增序号要重新从1加载
            for (var i = 0; i < data.length; i++) {
                var tr = document.createElement('tr');
                tbody.appendChild(tr);
                tr.setAttribute('index', num);
                var xh = document.createElement('td');
                xh.innerHTML = num++;
                tr.appendChild(xh);
                for (var k in data[i]) {
                    var td = document.createElement('td');
                    td.innerHTML = data[i][k];
                    td.className = 'nr';
                    tr.appendChild(td);
                }
                var td = document.createElement('td');
                td.innerHTML = '<a href="javascript:;" class="del">删除</a> <a href="javascript:;" class="edit">编辑</a><a href="javascript:;" class="up">↑</a><a href="javascript:;" class="down">↓</a>';
                tr.appendChild(td);
            }
            var inps = document.querySelectorAll('input');//获取左边的所有输入框的元素
            for (var i = 0; i < inps.length; i++) {
                inps[i].value = '';//将输入框的内容清空
            }
            binding();//给a标签里的删除编辑绑定事件
        }
        function del(uid) {//uid为你点击确定时获取当前行的
            for (var i = 0; i < data.length; i++) {//遍历原数据数组
                if (data[i].uid == uid) {
                    data.splice(i, 1);//学号匹配上把当前这个数据删除
                    return;
                }
            }
        }
        //点击查询按钮
        search.onclick = function () {
            uid.removeAttribute('readonly');
            flag = false;
            select(searchUname.value);//自己封装的查询方法
        }
        //根据查询
        function select(uname) {//uname为点击按钮时输入框的内容
            if (uname == '') {//如果为空就把所有数据重新加载出来
                load();
                return;
            }
            var res = [];//临时数组用来存储当前查出的信息
            for (var i = 0; i < data.length; i++) {
                if (data[i].uname == uname) {
                    res.push({
                        uname: data[i].uname,
                        uid: data[i].uid,
                        sex: data[i].sex,
                        age: data[i].age
                    });
                }
            }
            //查询完以后把临时数组数据加载在表格里
            tbody.innerHTML = '';
            num = 1;
            for (var i = 0; i < res.length; i++) {
                var tr = document.createElement('tr');
                tbody.appendChild(tr);
                tr.setAttribute('index', num);
                var xh = document.createElement('td');
                xh.innerHTML = num++;
                tr.appendChild(xh);
                for (var k in res[i]) {
                    var td = document.createElement('td');
                    td.innerHTML = res[i][k];
                    td.className = 'nr';
                    tr.appendChild(td);
                }
                var td = document.createElement('td');
                td.innerHTML = '<a href="javascript:;" class="del">删除</a> <a href="javascript:;" class="edit">编辑</a><a href="javascript:;" class="up">↑</a><a href="javascript:;" class="down">↓</a>';
                tr.appendChild(td);
            }
            binding();
        }
        function renewdata() {
            var renews = document.querySelectorAll('.renew');//获取所有类名为rennew的元素
            for (let i = 0; i < renews.length; i++) {//给每个renew绑定点击事件
                renews[i].onclick = function () {
                    var nrs = this.parentNode.parentNode.querySelectorAll('.nr');//获取当前renew这行的所有类名为nr的td元素
                    var obj = [];//临时数组用来存储nr里每一个input元素的内容
                    for (var k = 0; k < 4; k++) {
                        obj[k] = nrs[k].children[0].value;
                    }
                    var id = obj[1];//当前行的
                    newData(id, obj);//调用newData方法把原数据修改
                    this.innerHTML = '编辑';//把当前更新变为编辑
                    this.className = 'edit';//类名改为edit
                    flag = false;//添加按钮为添加状态
                    uid.value = '';//输入框清空内容
                    uname.value = '';//输入框清空内容
                    age.value = '';//输入框清空内容
                    sex.value = '';//输入框清空内容
                    uid.removeAttribute('readonly');//把输入框移除只读属性
                    for (var i = 0; i < nrs.length; i++) {//把nr里的input标签清除
                        var temp = nrs[i].children[0].value;//先用一个中间变量存储当前nr里input里的内容
                        nrs[i].innerHTML = temp;//把nr里的内容变为temp
                    }
                    binding();
                }
            }
        }
        // 点击更新时更新原数据
        function newData(uid, obj) {
            for (var i = 0; i < data.length; i++) {
                if (uid == data[i].uid) {
                    data[i].uname = obj[0];
                    data[i].uid = obj[1];
                    data[i].sex = obj[2];
                    data[i].age = obj[3];
                    return;
                }
            }
        }
        //编辑状态下点添加更新原数据
        function update(obj) {
            for (var i = 0; i < data.length; i++) {
                if (data[i].uid == obj.uid) {
                    data[i].uname = obj.uname;
                    data[i].uid = obj.uid;
                    data[i].sex = obj.sex;
                    data[i].age = obj.age;
                    flag = false;
                    return;
                }
            }
        }

    </script>
</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackzhuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值