Jquery操作表格多出一个内容行
前言
我的前端实在是太差劲了,导致Jquery操作表格多出一个内容行,这个功能我都做不出来,我想着使用Bootstrap的折叠,还想着使用Jquery的显示消失,搞了半天没搞出来满意的效果。最后还是经理过来分分钟手写出来.....
我发现一个问题,所谓的.Net后端,Java后端,在互联网工作中基本都得会前端,至少会Jquery,Bootstrap这些,所以,我决定好好补习一下前端知识。
需求
需求就是标题了,我希望Jquery操作表格多出一个内容行,目前表格是这样的

我想点击其中的任意一行,点击之后这一行下面出来新的内容行,比如,我这一行点击之后去后台获取几行数据,然后展示出来
如何监听每一行点击,获取点击id
由于我想点击型号,就出来内容行,所以,我在型号上加一个内容,因为每一行都可以点击,所以我加id肯定是不行的,那只能加class了,而且,我每点击某一行,都得获取这一行的一个数据id,这个时候用id=变量id肯定是不行的,我怎么获取这个id的值呢?而且,我点击展开了,收缩的时候必须只收缩这行的,不能收缩全部的。所以结果如下
<tr id="mark@(item.ProductStockId)">
<td data-title="型号">
<span class="view-warehouse" data-id="@item.ProductStockId">
<i class="fa fa-plus-square-o"></i>
@item.ProductName
</span>
</td>
class写了,id我用data-id来代替了,这样我可以很方便的获取data-id的值。
重要的是我的tr标签写了一个id,叫mark,这是为了我的内容行以HTML的形式贴上去。mark后面加了id,这个是为了我收缩的时候,只收缩我这一行
前后端
我可以写一个js方法,
$(function () {
id=0;
innerHTML = "";
isGetMessage = false;
$("#example .view-warehouse").click(toggleWareHouse);
//$("#example .view-warehouse").hover(toggleWareHouse);
function toggleWareHouse(e) {
var $that = $(e.target);
var MessageId = $that.attr("data-id");
var icon = $that.find('i');
if (MessageId == id) {
isGetMessage = true
} else {
id = MessageId;
isGetMessage = false;
innerHTML = "";
}
if (!isGetMessage) {
isGetMessage = true;
$.ajax({
type: 'get',
url: '/ProductStock/GetProductWarehouse?ProductStockId=' + MessageId,
success: function (data) {
for (var i = 0; i < data.productStockWarehouses.length; i++) {
// style="display:none;"
innerHTML +=
'<tr class="ware' + MessageId + '"'+ '> <td colspan="5">库存详细信息</td>' +
'<td>' + data.productStockWarehouses[i].WarehouseId + '</td><td>数量' + data.productStockWarehouses[i].Quantity + '</td><td>有货</td>' +
'<td>' +
'<div class="btn-group">' +
'<button type="button" class="btn btn-default btn-sm">' +
'操作' +
'</button>' +
'<button type="button" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown">' +
'<span class="caret"></span>' +
'</button>' +
'<ul class="dropdown-menu" role="menu">' +
'<li>' +
'<a href="javascript:;"
'<i class="fa fa-edit"></i> 存货转仓' +
'</a>' +
'</li>' +
'<li>' +
'<a href="javascript:;">' +
'<i class="fa fa-trash-o"></i> 出库销售' +
'</a>' +
'</li>' +
'</ul>' +
'</div>' +
'</td></tr>';
}
$("#mark" + MessageId).after(innerHTML);
}
});
}
if (icon.hasClass('fa-plus-square-o')) {
icon.removeClass('fa-plus-square-o').addClass('fa-minus-square-o');
$(".ware" + MessageId).show();
$("#mark" + MessageId).after(innerHTML);
} else {
icon.removeClass('fa-minus-square-o').addClass('fa-plus-square-o');
$(".ware" + MessageId).hide();
$(".ware" + MessageId).html('');
}
}
});
这个是jquery的选择器,选择id为example 下的class为view-warehouse的元素进行监听,点击之后出发toggleWareHouse方法。
$("#example .view-warehouse").click(toggleWareHouse);
toggleWareHouse方法可以写一个e,这个e就是我们点击的内容,e.target就是我们点击的这一行元素
function toggleWareHouse(e) {
var $that = $(e.target);
下面这个就是找到i元素,然后切换图标
var icon = $that.find('i');
if (icon.hasClass('fa-plus-square-o')) {
icon.removeClass('fa-plus-square-o').addClass('fa-minus-square-o');
我们在每行的tr上加了一个mark标签,我们使用after方法,进行后面的html添加,这样添加的tr都是兄弟标签
$("#mark" + MessageId).after(innerHTML);
折叠的时候你的内容行是要删除的,这里使用html('');
$(".ware" + MessageId).html('');
然后到了内容行内容的时候了,其实可以选择在加载表格的时候直接把内容行全部加载出来隐藏着,分页一页才10个数据,所以不担心浪费资源。
我这里使用的是ajax去后台加载数据的方法,而且每次点击同一行只加载一次,我使用全局变量进行了判断
最后就是后端了,很简单
public ActionResult GetProductWarehouse(int ProductStockId)
{
List<ProductStockWarehouse> productStockWarehouses = _productStockWarehouseBll.GetProductStockWarehouseByProductStockId(ProductStockId);
return Json(new { productStockWarehouses },JsonRequestBehavior.AllowGet);
}
问题更新,ajax异步带来的问题
我发现一个问题,因为我是ajax请求的,而ajax请求默认是异步的,这导致了什么?
异步导致的问题是需要时间,而这个需要时间就出现了一个bug,我快速点击型号来加载内容行,我一秒点几次,会发现,会出现重复的内容行。
因为我在ajax异步消耗的时间中快速的重复点击,ajax异步还没反应过来呢,下面的js就执行了几次了。
修改这个问题就很简单了,把异步修改为同步,去掉ajax里面的innerHTML
ajax添加 async: false,
ajax内部删除 $("#mark" + MessageId).after(innerHTML);
废弃使用HTML拼接
| 注意:拼接HTML已经被淘汰,我以后不会这样做了 |
我的经理过来看了我写的代码,说HTML拼接已经废弃了,让我不要再使用。以后不使用了,直接在加载的时候把内容行加载进去然后隐藏吧
Jquery操作表格多出一个内容行的更多相关文章
- 超级简单的jquery操作表格(添加/删除行、添加/删除列)
利用jquery给指定的table添加一行.删除一行 <script language="javascript" src="./jquery.js"> ...
- jquery操作表格 合并单元格
jquery操作table,合并单元格,合并相同的行 合并的方法 $("#tableid").mergeCell({ cols:[X,X] ///参数为要合并的列}) /** * ...
- jQuery操作表格(table)的常用方法、技巧汇总
摘录自:http://www.jb51.net/article/48943.htm 虽然现在DIV+CSS进行页的布局大行其道,但是很多地方使用table还是有很多优势,用table展示数据是比较方便 ...
- 第七章 jQuery操作表格及其它应用
1.表格变色 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org ...
- JQUERY操作html--获取和设置内容、属性、回调函数
一:jQuery - 获取内容和属性 1.获得内容 - text().html() 以及 val() text() - 返回所选元素的文本内容 html() - 返回所选元素的内容(包括 HTML 标 ...
- jquery操作表格总结
返回表格行 或 列的索引 td是列,tr是行: <script type="text/javascript"> $(document).ready(function() ...
- 简单编程:如何用java来打印出一个5行的三角形
- jquery 操作表格实例
案例1:隔行变色,滑动,点击变色以(选中取消效果)(addClass(),removeClass(),toggleClass()) Html: <h4>1.隔行变行</h4> ...
- jquery实现表格复选框---多行选择问题(php变量)
1.html多选框标签行 表头的多选框,用于全选,取消全选 <th><input id='allSelected' type="checkbox">< ...
随机推荐
- python_requests ~爬虫~小视频~~~
当一只小小的Py_Spider也有一段时间了, 期间,更多的时间是在爬取图片啊, 文字, 文档这类的东西, 今天突然一时兴起, 来爬一手视频! 所以就找到了远近闻名的六间房(六扇门)哈哈,~~~ 1. ...
- Lock锁和synchronized的不同点
- php自定义函数之回调函数
回调函数,可以配合匿名函数和变量函数实现更加优美.复杂的一种函数结构.大理石平台价格 回调函数,就是在处理一个功能的时候,我让让这个功能自定义能力再强一些,我准许调用这个函数的时候,还可以传入一个函数 ...
- 使用HttpClient进行Get方式通信(使用HttpGet获取网页数据)
1.项目结构 导入jar包 jar包去官网下载解压后项目新建lib目录,将解压包中的lib目录中的zip拷入项目lib目录文件夹,然后build path-->配置到项目中 2.TestGet. ...
- SVN “Previous operation has not finished”
https://jingyan.baidu.com/article/cbcede0761334902f40b4d31.html 需要运行sqlite3打开.svn下的wc.db数据库文件, sqlit ...
- Problem 5 素数筛法+并查集
$des$ 给定一个长度为 $n$ 的正整数序列 ${a_i }$.将 ${1,2,...,n}$ 划分成两个非空集合 $S.T$,使得 $gcd(\prod_{i \in S} a_i, \prod ...
- P4921 【情侣?给我烧了!】
加强前这道题还是比较友好的 首先我们设\(g_x\)为x对情侣没有一对坐在一起的数量 然后答案就可以表示成:\(C_n^k*A_n^k*2^k*g_{n-k}\) 这里的复杂度是\(O(T*N)\), ...
- IntelliJ IDEA 2017 MySQL5 绿色版 Spring 4 Mybatis 3 配置步骤详解(二)
前言 继续上一篇安装教程 首先是MySQL绿色版安装之后其他组件安装,如果篇幅较长会分为多篇深入讲解,随笔属于学习笔记诸多错误还望指出 共同学习. MySQL 5.7 绿色版 我本地安装的是 ...
- 【一起来烧脑】一步学会JavaScript体系
[外链图片转存失败(img-b0GOhxRY-1563571645197)(https://upload-images.jianshu.io/upload_images/11158618-ba249b ...
- Learning a Discriminative Feature Network for Semantic Segmentation(语义分割DFN,区别特征网络)
1.介绍 语义分割通常有两个问题:类内不一致性(同一物体分成两类)和类间不确定性(不同物体分成同一类).本文从宏观角度,认为语义分割不是标记像素而是标记一个整体,提出了两个结构解决这两个问题,平滑网络 ...