zoukankan      html  css  js  c++  java
  • 前端页面搜索功能实现

    前段页面获取到了后台段数据,搜索功能就不用后台了,直接就把获得段数据中查询。如果要查询其他不是获取当前段数据,那么还需要和后台交互。

    html代码只有一个select框。这个数据是后台给出的数据 

              <select class="chosen-select" onchange="query(this.value)"> <option value="0">${_res.get("laoshixingming")}</option> <c:forEach items="${list}" var="v"> <option value="${v.title}">${v.title}</option> </c:forEach> </select>
           这里页面显示,显示所有的数据,进入这个页面的时候就显示。这里可以改为使用js加载显示数据的

    <tbody id="tbody"> <c:forEach items="${list}" var="v"> <tr> <td>${v.title}</td> <td> <fmt:formatDate value="${v.start}" pattern="HH:mm:ss"></fmt:formatDate> - <fmt:formatDate value="${v.end}" pattern="HH:mm:ss"></fmt:formatDate> </td> </tr> </c:forEach> </tbody>
    <script type="text/javascript" id="searchText">
      //这里的userTimes的数据是和初始化加载显示的页面数据一样的, 就是上边的 ${list} jstl 认识对象集合
    //js不认识 所以这里在后台把list转化为了jsonObject JSONObject.toJSON(userTimes)
    var list = ${userTimes}; 

    function query(name) {
    var html = "";
    list.forEach(function (v, index, arr) {
    /*选择了老师后的搜索*/
    if(name == v.title){
    html += "<tr>" +
    " <td>" + v.title + "</td>" +
    " <td>" +
    format(v.start) +
    " -" +
    format(v.end) +
    " </td>" +
    " </tr>";
    }

    /*初始化的时候的数据*/
    if(name == '0'){
    html += "<tr>" +
    " <td>" + v.title + "</td>" +
    " <td>" +
    format(v.start) +
    " -" +
    format(v.end) +
    " </td>" +
    " </tr>";
    }

    console.log(html)
    $("#tbody").html(html);
            //搜索显示数据后,如果老师名称一样,还是使用下边的合并单元格方法
    uniteTable("tb",1);
    })
    }

    function format(myDate) {
    if(myDate != null){
    //有值,不是空2019-01-01 10:00:00
    return new Date(myDate).format("hh:mm:ss");
    }
    return myDate;
    }

    /**
    * 格式化时间的,网上复制的
    * @param fmt yyyy-MM-dd hh:mm:ss 格式就是下边的,小时一般大写,这里小写。
    * @returns {*}
    * 如果是unix时间,那么 new Date(unixTime).format("hh:mm:ss") ====>> 12:00:00
    */
    Date.prototype.format = function(fmt) {
    var o = {
    "M+" : this.getMonth()+1, //月份
    "d+" : this.getDate(), //日
    "h+" : this.getHours(), //小时
    "m+" : this.getMinutes(), //分
    "s+" : this.getSeconds(), //秒
    "q+" : Math.floor((this.getMonth()+3)/3), //季度
    "S" : this.getMilliseconds() //毫秒
    };
    if(/(y+)/.test(fmt)) {
    fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
    }
    for(var k in o) {
    if(new RegExp("("+ k +")").test(fmt)){
    fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
    }
    }
    return fmt;
    }


     //合并挨着的表格的数据,
    //老师名字一样就合并了后台只需要按照老师名称排序就行,把来时名称一样的放到一块
    function uniteTable(tableId,colLength) {
    //colLength-- 需要合并单元格的列1开始
    var tb=document.getElementById(tableId);

    tb.style.display='';

    var i = 0;
    var j = 0;

    var rowCount = tb.rows.length; // 行数
    var colCount = tb.rows[0].cells.length; // 列数

    var obj1 = null;
    var obj2 = null;
    var obj3 = null;

    //为每个单元格命名
    for (i = 0; i < rowCount; i++) {
    for (j = 0; j < colCount; j++) {
    tb.rows[i].cells[j].id = "tb__" + i.toString() + "_" + j.toString();
    }
    }


    //合并行 (列循环)第一行第一列均从0开始
    for (i = 0; i < colCount; i++) {

    //如果第3,4,5列不进行合并操作
    if (i == 2 || i == 3 || i == 4) continue;
    obj1 = document.getElementById("tb__0_" + i.toString())
    //(行循环)
    for (j = 1; j < rowCount; j++) {
    obj2 = document.getElementById("tb__" + j.toString() + "_" + i.toString());

    if(i == 0){ //第1列全部进行合并操作
    if (obj1.innerText == obj2.innerText) { //判断值是否相等
    obj1.rowSpan++; //合并行
    obj2.parentNode.removeChild(obj2); //移除被合并的行
    } else {
    obj1 = document.getElementById("tb__" + j.toString() + "_" + i.toString());
    }
    }else if(i == 5){ //第6列合并操作参照第2列,第二列合并了,第5列才进行合并
    obj3 = document.getElementById("tb__" + j.toString() + "_" + (i-4).toString());
    if (obj1.innerText == obj2.innerText && obj3 == null) {
    obj1.rowSpan++;
    obj2.parentNode.removeChild(obj2);
    } else {
    obj1 = document.getElementById("tb__" + j.toString() + "_" + i.toString());
    }
    }else{ //只有前一列进行了合并操作后面的才会进行合并操作
    obj3 = document.getElementById("tb__" + j.toString() + "_" + (i-1).toString());
    if (obj1.innerText == obj2.innerText && obj3 == null) {
    obj1.rowSpan++;
    obj2.parentNode.removeChild(obj2);
    } else {
    obj1 = document.getElementById("tb__" + j.toString() + "_" + i.toString());
    }
    }
    }
    }
    }

    </script>


  • 相关阅读:
    网页调用手机端的方法
    文章分类和标签的数据库设计
    linux 查看进程所在目录
    php-fpm 解析
    php-fpm.conf 解析
    php-fpm 操作命令
    php 获取 post 请求体参数
    获取请求 header 中指定字段的值
    redis 限制接口访问频率
    redis 常用操作
  • 原文地址:https://www.cnblogs.com/renjianjun/p/10584138.html
Copyright © 2011-2022 走看看