首页 > 其他分享 >11-html常用标签与界面交互总结

11-html常用标签与界面交互总结

时间:2022-10-26 19:46:33浏览次数:58  
标签:11 标签 cars element html let querySelector car document

HTML常用标签与界面交互总结.md

  1. 表格标签

    table
    caption
    thead
    th
    tbody
    tr
    td
    tfoot

    <!DOCTYPE html>
     <html>
    <table>
    <caption>表格的标题</caption>
    <!-- 表头 -->
    <thead>
         <tr>
             <th>表头值字段<th>
         </tr>
    </thead>
    <!-- 表格内容  -->
    <tbody>
         <tr>
             <td>数据</td>
         <tr>
     </tbody>
    </table>
    </html>
    

    表格的跨列、跨行

    在td标签里书写 colspan='列数' | rowspan='行数'

  2. form表单

    <form action="地址" method="提交的方式get/most" enctype="数据添加的格式"></form>
    
  3. 文本框元素

    <input type="text" name="" value="">
    
  4. 密码框元素

     <input type="password" name="" value="">
    
  5. 单选框
    单选框的name属性表示分组,name值为同一个的为一组

    <input type="radio" name="" value="" checked>
    
  6. 复选框

    <input type="checkbox" name="" value="" checked>
    
  7. 下拉框

    <select name="">
         <option value="" selected></option>
     </select>
    
  8. 文本域

     <textarea name=""></textarea>
    
  9. 文件标签

    <input type="file" name="">
    
  10. 按钮

    <button type="button">普通按钮</button>
    <button type="submit">提交按钮</button>
    <button type="reset">重置按钮</button>
    

综合练习:实现表格数据的增删改查
html源代码如下:

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title> 汽车租赁系统</title>
</head>

<body>
    <!-- 顶部查询文本输入框、查询添加按钮 -->
    <input type="text" name="search-photo" placeholder="支持车牌号模糊查询">
    <button type="button" id="search-button">查询</button>
    <button type="button" id="add-button">新增</button>
    <select name="order">
        <option value="1">里程降序显示</option>
        <option value="2">准载人数升序显示</option>
        <option value="3">价格升序显示</option>
        <option value="4">复原</option>
    </select>
    <button type="button" id="order-button">排序</button>
    <!-- 展示数据的表格 -->
    <table border="1" id="show">
        <!-- 设置表头信息 -->
        <thead>
            <tr>
                <th>车牌号</th>
                <th>里程数</th>
                <th>准载人数</th>
                <th>租赁价格</th>
                <th colspan="2">
                    操作
                </th>
            </tr>
        </thead>
        <tbody>

        </tbody>
    </table>

    <!-- 新增汽车信息的表单,默认不显示,点击顶部新增按钮时才显示 -->
    <form id="add-form" style="display:none ;">
        <table>
            <caption>新增汽车信息</caption>
            <tbody>
                <tr>
                    <td align="right">汽车牌照:</td>
                    <td><input type="text" name="photo" placeholder="请输入汽车牌照"><span></span></td>
                </tr>
                <tr>
                    <td align="right">汽车行驶里程数:</td>
                    <td><input type="text" name="mile" placeholder="请输入汽车行驶里程数"><span></span></td>
                </tr>
                <tr>
                    <td align="right">汽车准载人数:</td>
                    <td><select name="passenger">
                            <option value="1">1</option>
                            <option value="4">4</option>
                            <option value="7">7</option>
                        </select></td>
                </tr>
                <tr>
                    <td align="right">汽车租赁价格:</td>
                    <td><input type="text" name="price" placeholder="请输入租赁价格"><span></span></td>
                </tr>
                <tr>
                    <td align="right"><button type="reset">重置</button></td>
                    <td><button type="submit" id="add-new-car-button">确认添加</button></td>
                </tr>
            </tbody>
        </table>
    </form>

    <!-- 修改汽车信息的表单,默认不显示,点击编辑按钮时才显示 -->
    <form id="edit-form" style="display:none ;">
        <table>
            <caption>修改汽车信息</caption>
            <tbody>
                <tr>
                    <td align="right">汽车牌照[不可修改]:</td>
                    <td><input type="text" name="photo" readonly></td>
                </tr>
                <tr>
                    <td align="right">汽车行驶里程数:</td>
                    <td><input type="text" name="mile" placeholder="请输入汽车行驶里程数"><span></span></td>
                </tr>
                <tr>
                    <td align="right">汽车准载人数:</td>
                    <td><select name="passenger">
                            <option value="1">1</option>
                            <option value="4">4</option>
                            <option value="7">7</option>
                        </select></td>
                </tr>
                <tr>
                    <td align="right">汽车租赁价格:</td>
                    <td><input type="text" name="price" placeholder="请输入租赁价格"><span></span></td>
                </tr>
                <tr>
                    <td align="right"><button type="reset">重置</button></td>
                    <td><button type="submit" id="edit-car-button">确认修改</button></td>
                </tr>
            </tbody>
        </table>
    </form>

    <!-- 实现动态修改表格数据 -->
    <script>
        //声明一个变量来保存需要展示的数据对象,默认为空
        let cars = [];

        //实现载入数据的方法
        let loadData = function (data) {
            //保存要拼接的sql语句
            let row = [];
            //遍历数据数据,依次赋值到表格的某一行中:拼接html语句
            data.forEach(car => {
                //每个对象对应一行数据
                row.push('<tr>');
                row.push(`<td name="photo">${car.photo}</td>`);
                row.push(`<td name="mile">${car.mile}</td>`);
                row.push(`<td name="passenger">${car.passenger}</td>`);
                row.push(`<td name="price">${car.price}</td>`);
                row.push('<td><button type="button" id="edit-button">编辑</button></td>');
                row.push('<td><button type="button" id="delete-button">删除</button></td>');
                row.push('</tr>');
            });
            //判断数据是否为空
            if (row.length == 0) {
                let empty = '<tr><td align = "center" colspan="5">数据为空!</td></tr>';
                //插入语句
                document.querySelector('tbody').innerHTML = empty;
            } else {
                //插入语句到tbody中
                document.querySelector('#show').querySelector('tbody').innerHTML = row.join('');
            }
            //初始化按钮事件
            initAllEditButtonListener();
        };


        //给所有行的编辑按钮添加事件
        function initAllEditButtonListener() {
            //先找到表格里面所有的编辑和删除按钮
            let editButtons = document.querySelector('#show').querySelectorAll('#edit-button');
            let deleteButtons = document.querySelector('#show').querySelectorAll('#delete-button');

            //给每个编辑按钮都加上事件
            editButtons.forEach(editButton => editButton.addEventListener('click', function () {
                //拿到当前行的数据
                let carPhoto = editButton.parentElement.parentElement.firstElementChild.innerText;
                let car = cars.find(car => car.photo == carPhoto);

                //拿到编辑界面的元素
                let editElements = document.querySelector('#edit-form').querySelectorAll('[name]');
                //把当前行的数据赋值给编辑界面对应的位置上去
                editElements.forEach(element => element.value = car[element.name]);
                //显示编辑界面
                document.querySelector('#edit-form').style.display = 'block';
            }));

            //给每个删除按钮添加事件
            deleteButtons.forEach(deleteButton => deleteButton.addEventListener('click', function () {
                //拿到当前行的数据
                let carPhoto = deleteButton.parentElement.parentElement.firstElementChild.innerText;
                //找到当前行元素在数组中的索引,根据索引删除
                let index = cars.forEach(car => car.photo = carPhoto);
                cars.splice(index, 1);
                //刷新数据
                loadData(cars);
            }));
        }

        //载入原始数据
        loadData(cars);
        //绑定监听事件
        registerListener();

        //给新增按钮添加事件
        let addButton = document.querySelector('#add-button');
        addButton.addEventListener('click', addCarInfo);
        //添加按钮的事件 
        function addCarInfo() {
            //展示新增界面 
            document.querySelector('#add-form').style.display = 'block';
        }

        //验证数据非空
        function verifyDataIsNotEmpty() {
            let value = this.value;
            if (value == '') {
                this.nextElementSibling.innerText = '数据不能为空!';
                return false;
            }
            this.nextElementSibling.innerText = '';
            return true;
        }
        //给新增和编辑的组件绑定数据验证事件
        function registerListener() {
            //新增界面组件添加监听事件
            document.querySelector('#add-form').querySelectorAll('[name]').forEach(element => {
                element.addEventListener('blur', verifyDataIsNotEmpty);
                element.addEventListener('input', verifyDataIsNotEmpty);
            });
            //编辑界面组件添加监听事件
            document.querySelector('#edit-form').querySelectorAll('[name]').forEach(element => {
                element.addEventListener('blur', verifyDataIsNotEmpty);
                element.addEventListener('input', verifyDataIsNotEmpty);
            });
        }

        //给新增的表单添加事件
        let addForm = document.querySelector('#add-form');
        addForm.addEventListener('submit', addNewCarInfo);
        function addNewCarInfo(event) {
            //拿到新增数据,添加到数组中,重新载入数据
            let info = document.querySelector('#add-form').querySelectorAll('[name]');
            //非空校验
            let flag = true;
            //验证车牌号:首为为汉字,第二位为大写字母,后面5个数字和大写字母的组合
            let regStr = /^[\u4e00-\u9fa5][A-Z][0-9A-Z]{5}$/;
            //数据不为空,才添加
            let car = {};
            info.forEach(element => {
                car[element.name] = element.value;
                if (element.value == '') {
                    flag = false;
                };
            });
            //车牌格式正确,才添加
            if(!regStr.test(car.photo)){
                flag=false;
                info[0].nextElementSibling.innerText = '车牌号格式不正确!';
            }
            //数据不为空,格式正确,进行添加操作
            if (flag) {
                cars.push(car);
                loadData(cars);
                //新增成功,新增界面隐藏
                document.querySelector('#add-form').style.display = 'none';
                //重置信息
                document.querySelector('#add-form').reset();
            } else {
                //新增成功,新增界面隐藏
                document.querySelector('#add-form').style.display = 'block';
            }
            //去掉按钮默认的跳转
            event.preventDefault();


        }

        //给编辑界面的确定按钮添加事件
        let editCarButton = document.querySelector('#edit-car-button');
        editCarButton.addEventListener('click', editCarInfo);

        function editCarInfo(event) {
            //拿到新增数据,添加到数组中,从新载入数据
            let info = document.querySelector('#edit-form').querySelectorAll('[name]');


            let newCar = {};
            info.forEach(element => newCar[element.name] = element.value);
            //在数据数值找到对应的车牌号修改数据
            let index = cars.findIndex(car => newCar.photo == car.photo);
            //替换数据
            cars.splice(index, 1, newCar);
            loadData(cars);
            //修改成功,新增界面隐藏
            document.querySelector('#edit-form').style.display = 'none';
            //重置信息
            document.querySelector('#edit-form').reset();

            //去掉按钮默认的跳转
            event.preventDefault();
        }

        //给查询按钮添加事件
        let searchButton = document.querySelector('#search-button');
        searchButton.addEventListener('click', function () {
            //拿到查询条件
            let condition = document.querySelector('[name="search-photo"]').value;
            let conditionCar = [];
            //如果条件为空,则显示全部汽车信息
            if (condition == '') {
                loadData(cars);
            }
            //条件不为空,按照条件查询:包含
            cars.forEach(car => {
                if (car.photo.includes(condition)) {
                    conditionCar.push(car);
                }
            });
            //显示筛选过的信息
            loadData(conditionCar);
        });

        //里程降序排列事件
        let order = document.querySelector('#order-button');
        order.addEventListener('click', function () {
            let condition = document.querySelector('[name="order"]');
            //用副本排序,然后显示[数组的深拷贝]
            let copy = cars.slice(0);
            if (condition.value == 1) {
                //里程降序
                copy.sort((prev, next) => next.mile - prev.mile);
            } else if (condition.value == 2) {
                //准载人数升序
                copy.sort((prev, next) => prev.passenger - next.passenger);
            } else if (condition.value == 3) {
                //价格升序
                copy.sort((prev, next) => prev.price - next.price);
            } else {
                //复原:
                loadData(cars);
            }
            loadData(copy);

        });


    </script>
</body>

</html>

标签:11,标签,cars,element,html,let,querySelector,car,document
From: https://www.cnblogs.com/jackchen1928/p/16829773.html

相关文章

  • 工业网关BL110 COM口采集Modbus协议设备
    COM口采集配置4个COM口的配置内容一样,COM1固定为RS232,COM2、COM3和COM4是RS232/RS485可选串口(默认为RS485)。因I/O模块M140T是RS485接口,则选择以COM2连接为例说明COM口采集配......
  • 工业网关BL110 LAN口采集Modbus协议设备S475
    本示例是介绍LAN口采集S475设备,故配置LAN口的信息,LAN口的配置如下:工业智能网关BL110LAN口如何配置采集Modbus协议设备S475(1)双击“LAN”弹出LAN口的配置框。(2)DHCP:LAN口是否......
  • Vue项目中,html高度无法撑开的解决方法
    在src目录中新建CSS目录,并在此目录下创建global.css文件,填写如下内容:  随后在main.js中引入该CSS文件。如下: ......
  • 工业网关BL110COM口采集西门子PLC的配置
    COM口采集西门子PLC的配置4个COM口的配置内容一样,COM1固定为RS232,COM2、COM3和COM4是RS232/RS485可选串口(默认为RS485)。因S7-200的COM是RS485接口,则选择以COM2连接为例说明C......
  • 工业网关BL110网口采集西门子PLC
    WAN口和LAN口都可以采集西门子PLC,可以直连西门子PLC也可以通过交换机采 LAN口的配置本示例是介绍LAN口直连采集西门子S7-200SMART,故配置LAN口的信息,LAN口的配置如下:工业智......
  • 工业网关BL110COM口采集三菱PLC FX3U
    COM口采集三菱PLC的配置4个COM口的配置内容一样,COM1固定为RS232,COM2、COM3和COM4是RS232/RS485可选串口(默认为RS485)。因三菱FX3U是RS422接口,通过RS422转RS232线接到BL110网......
  • OpenJudge2811:熄灯问题(枚举)
    熄灯问题有一个由按钮组成的矩阵,其中每行有6个按钮,共5行。每个按钮的位置上有一盏灯。当按下一个按钮后,该按钮以及周围位置(上边、下边、左边、右边)的灯都会改变一次。即......
  • 【408】2011
    42双指针应该更快吧难的是如何各种边界条件43数据表示&运算加法器直接运算并产生标志后续再通过各种符号位来判断(是否是有符号加减法、是否溢出等)44虚拟做的还......
  • Python代码编写辅导:CSC411 Digit Classification
    全文链接:tecdat.cn/?p=29674RequirementInthisassignment,youwillcomparethecharacteristicsandperformanceofdifferentclassifiers,namelylogisticregre......
  • 帝国CMS灵动标签调用多表多模型调用内容
    1、调用多模型的最新文章[e:loop={'select*from(selectid,classid,titleurl,filename,title,newstime,titlepicfromphome_ecms_moviewherenewstimeunions......