zoukankan      html  css  js  c++  java
  • jQuery表格模糊搜索

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>搜索功能</title>
      <link rel="stylesheet" href="https://www.jq22.com/jquery/bootstrap-4.2.1.css">
      <style>
        .content1 {
          width: 600px;
          height: 600px;
    
          display: inline-block;
          margin-top: 50px;
          margin-left: 100px;
        }
    
        .content2 {
          width: 600px;
          height: 600px;
          display: inline-block;
    
          margin-top: 50px;
          margin-left: 100px;
    
        }
    
    
    
        #lin {
          margin: 20px 0;
          height: 30px;
          padding: 5px;
          box-sizing: border-box;
        }
    
        .names {
          width: 300px;
          margin-bottom: 30px;
        }
      </style>
    </head>
    
    <body>
    
    
    
      <div class="content1">
        <!-- <input type="text" id="lin" placeholder="请输入需要搜索的内容"> -->
        <input type="text" class="form-control names" id="lin" placeholder="请输入需要搜索的内容">
    
        <table class="table table-striped table-bordered" id="table-1">
          <thead class="thead-dark">
            <tr>
              <th>姓名</th>
              <th>性别</th>
              <th>年龄</th>
              <th>电话</th>
              <th>地址</th>
            </tr>
          </thead>
    
          <tbody>
    
            <tr>
              <td>林兵</td>
              <td></td>
              <td>18</td>
              <td>12345678941</td>
              <td>富顺</td>
            </tr>
            <tr>
              <td>赖玉英</td>
              <td></td>
              <td>18</td>
              <td>12345678942</td>
              <td>南充</td>
            </tr>
            <tr>
              <td>潘旭</td>
              <td></td>
              <td>20</td>
              <td>12345678912</td>
              <td>富顺</td>
            </tr>
            <tr>
              <td>王威平</td>
              <td></td>
              <td>20</td>
              <td>97543152146</td>
              <td>广元</td>
            </tr>
            <tr>
              <td>李丹</td>
              <td></td>
              <td>30</td>
              <td>14725836910</td>
              <td>江安</td>
            </tr>
            <tr>
              <td>陈志樑</td>
              <td></td>
              <td>20</td>
              <td>31546287451</td>
              <td>富顺</td>
            </tr>
            <tr>
              <td>郭仕宏</td>
              <td></td>
              <td>20</td>
              <td>51240316845</td>
              <td>南充</td>
            </tr>
          </tbody>
        </table>
      </div>
    
      <div class="content2">
    
        <select class="form-control names" id="select">
          <option>请选择地址</option>
          <option>富顺</option>
          <option>南充</option>
          <option>广元</option>
          <option>江安</option>
          <option>成都</option>
          <option>内江</option>
        </select>
        <table class="table table-striped table-bordered" id="table-2">
          <thead class="thead-dark">
            <tr>
              <th>姓名</th>
              <th>性别</th>
              <th>年龄</th>
              <th>电话</th>
              <th>地址</th>
            </tr>
          </thead>
    
          <tbody>
    
            <tr>
              <td>林兵</td>
              <td></td>
              <td>18</td>
              <td>12345678941</td>
              <td>富顺</td>
            </tr>
            <tr>
              <td>赖玉英</td>
              <td></td>
              <td>18</td>
              <td>12345678942</td>
              <td>南充</td>
            </tr>
            <tr>
              <td>潘旭</td>
              <td></td>
              <td>20</td>
              <td>12345678912</td>
              <td>富顺</td>
            </tr>
            <tr>
              <td>王威平</td>
              <td></td>
              <td>20</td>
              <td>97543152146</td>
              <td>广元</td>
            </tr>
            <tr>
              <td>李丹</td>
              <td></td>
              <td>30</td>
              <td>14725836910</td>
              <td>江安</td>
            </tr>
            <tr>
              <td>陈志樑</td>
              <td></td>
              <td>20</td>
              <td>31546287451</td>
              <td>富顺</td>
            </tr>
            <tr>
              <td>郭仕宏</td>
              <td></td>
              <td>20</td>
              <td>51240316845</td>
              <td>南充</td>
            </tr>
          </tbody>
        </table>
      </div>
    
      <script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script>
      <script src="https://www.jq22.com/jquery/bootstrap-4.2.1.js"></script>
      <!-- <script src="lin_search.js"></script> -->
      <script>
        function Search(objId, inputId, color) {
          /* 方法说明
              此方法依赖于 jquery 开发的,必须先导入 jquery
              下拉框筛选时默认以第一个 option 的值 代表所有,即当选择第一个 option 时,返回所有数据,不进行搜索
         
            *@param{String} objId 需要被搜索内容表格的id或class
            *@param{String} inputId 搜索框的id或class || 下拉框的id或class
            *@param{String} color 搜索内容以什么颜色返回,不传默认为红色
           */
    
    
    
          // 表格搜索
          this.tableSearch = function () {
            $('#content-null').remove(); // 每次进入先移出掉上次搜索产生的tr
            this.objId.find('tr span').css({// 每次搜索开始,先把所有字体颜色恢复初始状态
              'color': "black",
              'font-weight': 'normal'
            });
    
    
            var tableTrTdContent = this.objId.find('tr td:contains("' + this.inpIdContents + '")'); // 获取所有含有搜索内容的td,类似于集合存储       
            if (this.inpIdContents != '') { // 如果搜索内容为空,就不用去更改样式,直接还原所有
    
              if (tableTrTdContent.length == 0) {// 判断集合长度是否为0,为0则表示搜索的内容在表格里不存在
    
    
                this.objId.find('tr:not(:eq(0))').css({ // 先将所有tr隐藏
                  display: "none"
                })
    
                var tableColspanNumber = this.objId.find('tr').eq(0).find('th').length || this.objId.find('tr').eq(0).find('td').length; // 获取表头的列数 
                var tr = $(`
        <tr id="content-null">
        <td colspan='${tableColspanNumber}' style="text-align: center;">暂无你搜索的内容</td>
        </tr>
        `); // 创建搜索不到时,显示的tr
                this.objId.append(tr)
              } else if (tableTrTdContent.length > 0) {// 集合长度不为0,则表示搜索的内容在表格里
                // console.log("我在")
                // console.log(tableTrTdContent)
    
                $('#content-null').remove();
    
                this.objId.find('tr:not(:eq(0))').css({ // 先将所有tr隐藏
                  display: "none"
                })
    
    
                for (var a = 0; a < tableTrTdContent.length; a++) {// 遍历找到的td集合,进行每个渲染颜色
                  // console.log(tableTrTdContent[a].parentNode)
                  tableTrTdContent[a].parentNode.style.display = "table-row"; // 让含有搜索内容的 tr 进行显示
                  var contents = tableTrTdContent.eq(a).text(); // 获取到含有搜索内容的td里的集体内容,即字符串
                  var contentsArr = contents.split(this.inpIdContents); // 以搜索框中的内容将td的值进行分割成数组
                  var contentArrFirst = contentsArr[0]; // 将数组里的第一个值取出
                  for (var j = 1; j < contentsArr.length; j++) {// 将分割出来的内容进行染色后重新组合在一起
                    contentArrFirst += `<span style=';color:${this.color};font-weight:bolder'>` + this.inpIdContents + "</span>" + contentsArr[j];
                  };
                  tableTrTdContent.eq(a).html(contentArrFirst); // 将td里的值从新解析成html
                  console.log(tableTrTdContent.length - 1)
                }
    
    
              }
            } else {
              this.objId.find('tr:not(:eq(0))').css({
                display: "table-row"
              });
    
              $('#content-null').remove();
            }
    
    
          }
    
          // 初始化,判断需要搜索标签的类型
          this.init = function () {
            this.color = color || 'red';
            console.log(this.color)
            if (typeof $ == "undefined") {// 判断是否引入 jquery
              throw new Error("该搜索功能依赖于jquery插件,需要引入jquery");
            }
    
    
            if (typeof objId[0] == "undefined") {// 判断是通过jquery获取的id还是原生获取的id,需要把原生的转换成jquery
              this.objId = $(objId); // 需要搜索的对象的id       
    
            } else {
              this.objId = objId; // 需要搜索的对象的id          
    
            }
    
            if (typeof inputId[0] == "undefined") {// 判断搜索框获取的方式,转换成jquery获取
              var inp = $(inputId);
            } else {
              var inp = inputId;
            }
            // console.log('inp',inp)
            // if (typeof inp == 'string' || typeof inp == 'number') { // 判断传来的是 input 标签,还是一个搜素内容
            //   this.inpIdContents = inp.trim()
            // } else {
    
    
            // }
            if (inp[0].tagName == "SELECT") { // 如果是以下拉框来筛选,则下拉框第一个选项为显示所有信息,即不搜索
              if (inp.val().trim() == inp.find('option:first').val()) {
                this.inpIdContents = '' // 搜索的内容为空
              } else {
                this.inpIdContents = inp.val().trim() // 获取搜索框里的值,去除首尾空格
    
              }
    
            } else {
              this.inpIdContents = inp.val().trim() // 获取搜索框里的值,去除首尾空格
    
            }
            // console.log(inp[0].tagName)
            // console.log(this.inpIdContents)
            // console.log(typeof inp)
            this.objType = this.objId[0].tagName; // 获取需要被搜索对象的标签类型,将jquey转化为原生js获取标签类型
            // console.log(this.objId.find("tr th").length)
            // if (this.objId.find("tr th").length == 0) {// 判断表格是否有表头,没有就创建错误信息
            //   throw new Error("你要搜索的表格没有表头 <th> 标签,请规范好表格");
            // }
    
    
            switch (this.objType) {// 判断搜索对象
              case 'TABLE': this.tableSearch(); break; // 对象是表格,进行表格搜索
    
            }
          }
          this.init()
        }
        //  表1
        $("#lin").on('keyup', function () {
          var table1 = $("#table-1");
          var input = $(this);
          new Search(table1, input)
    
        })
        // 表2
        $('#select').on('change', function () {
          var content = $('#select') // 下拉框
          var table2 = $('#table-2')
          new Search(table2, content, '#6332f6')
        })
    
    
    
      </script>
    
    
    
    
    </body>
    
    </html>
  • 相关阅读:
    便签一
    当代大学生存在问题及需求分析
    字符 单词数 行数
    流量管理系统——需求分析
    简单的四则运算
    强大的修图app--美图秀秀
    js 中 setTimeout()的用法
    .net spit 用法
    关闭 Activity 关闭方式 finish(), exit(), killProcess(), restartPackage()(转载)
    Android实现购物车功能
  • 原文地址:https://www.cnblogs.com/lin961234478/p/13602712.html
Copyright © 2011-2022 走看看