前段页面获取到了后台段数据,搜索功能就不用后台了,直接就把获得段数据中查询。如果要查询其他不是获取当前段数据,那么还需要和后台交互。
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>
原文地址:https://www.cnblogs.com/renjianjun/p/10584138.html
时间: 2024-11-11 14:57:42