首页 web前端 js教程 基于jquery的合并table相同单元格的插件(精简版)_jquery

基于jquery的合并table相同单元格的插件(精简版)_jquery

May 16, 2016 pm 06:08 PM
table 单元格

效果如下

原表格:

col0 col1 col2 col3
SuZhou 11111 22222 SuZhouCity
SuZhou 33333 44444 SuZhouCity
SuZhou 55555 66666 SuZhouCity
ShangHai 77777 88888 ShangHaiCity
ShangHai uuuuu hhhhh ShangHaiCity
ShangHai ggggg ccccc ShangHaiCity
GuangZhou ttttt eeeee GuangZhouCity
GuangZhou ppppp qqqqq GuangZhouCity

处理之后的样子:

col0 col1 col2 col3
SuZhou 11111 22222 SuZhouCity
33333 44444
55555 66666
ShangHai 77777 88888 ShangHaiCity
uuuuu hhhhh
ggggg ccccc
GuangZhou ttttt eeeee GuangZhouCity
ppppp qqqqq

效果出来, 看上去比较简单, 下面先看下页面

复制代码 代码如下:




























































col0 col1 col2 col3
SuZhou 11111 22222 SuZhouCity
SuZhou 33333 44444 SuZhouCity
SuZhou 55555 66666 SuZhouCity
ShangHai 77777 88888 ShangHaiCity
ShangHai uuuuu hhhhh ShangHaiCity
ShangHai ggggg ccccc ShangHaiCity
GuangZhou ttttt eeeee GuangZhouCity
GuangZhou ppppp qqqqq GuangZhouCity


核心代码:
复制代码 代码如下:

// 这里写成了一个jquery插件的形式
$('#process').mergeCell({
// 目前只有cols这么一个配置项, 用数组表示列的索引,从0开始
// 然后根据指定列来处理(合并)相同内容单元格
cols: [0, 3]
});

下面看看这个小插件的完整代码:
复制代码 代码如下:

;(function($) {
// 看过jquery源码就可以发现$.fn就是$.prototype, 只是为了兼容早期版本的插件
// 才保留了jQuery.prototype这个形式
$.fn.mergeCell = function(options) {
return this.each(function() {
var cols = options.cols;
for ( var i = cols.length - 1; cols[i] != undefined; i--) {
// fixbug console调试
// console.debug(cols[i]);
mergeCell($(this), cols[i]);
}
dispose($(this));
});
};
// 如果对javascript的closure和scope概念比较清楚, 这是个插件内部使用的private方法
// 具体可以参考本人前一篇随笔里介绍的那本书
function mergeCell($table, colIndex) {
$table.data('col-content', ''); // 存放单元格内容
$table.data('col-rowspan', 1); // 存放计算的rowspan值 默认为1
$table.data('col-td', $()); // 存放发现的第一个与前一行比较结果不同td(jQuery封装过的), 默认一个"空"的jquery对象
$table.data('trNum', $('tbody tr', $table).length); // 要处理表格的总行数, 用于最后一行做特殊处理时进行判断之用
// 我们对每一行数据进行"扫面"处理 关键是定位col-td, 和其对应的rowspan
$('tbody tr', $table).each(function(index) {
// td:eq中的colIndex即列索引
var $td = $('td:eq(' + colIndex + ')', this);
// 取出单元格的当前内容
var currentContent = $td.html();
// 第一次时走此分支
if ($table.data('col-content') == '') {
$table.data('col-content', currentContent);
$table.data('col-td', $td);
} else {
// 上一行与当前行内容相同
if ($table.data('col-content') == currentContent) {
// 上一行与当前行内容相同则col-rowspan累加, 保存新值
var rowspan = $table.data('col-rowspan') + 1;
$table.data('col-rowspan', rowspan);
// 值得注意的是 如果用了$td.remove()就会对其他列的处理造成影响
$td.hide();
// 最后一行的情况比较特殊一点
// 比如最后2行 td中的内容是一样的, 那么到最后一行就应该把此时的col-td里保存的td设置rowspan
if (++index == $table.data('trNum'))
$table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
} else { // 上一行与当前行内容不同
// col-rowspan默认为1, 如果统计出的col-rowspan没有变化, 不处理
if ($table.data('col-rowspan') != 1) {
$table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
}
// 保存第一次出现不同内容的td, 和其内容, 重置col-rowspan
$table.data('col-td', $td);
$table.data('col-content', $td.html());
$table.data('col-rowspan', 1);
}
}
});
}
// 同样是个private函数 清理内存之用
function dispose($table) {
$table.removeData();
}
})(jQuery);

主要的说明在注释里应该都有了, 代码的确比较简单, 像有些地方还值得改进
•处理的table内容是从tbody开始查找的, 如果没有tbody, 那应该给出个更通用化的方案
•for ( var i = cols.length - 1; cols[i] != undefined; i--)...如果表格数据量大, 处理的列也比较多, 这里不进行优化会有造成浏览器线程阻塞的风险, 可以考虑用setTimeout
•其他什么值得改进的, 我想应该会不少的
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Excel 发现一个或多个公式引用存在问题:如何修复 Excel 发现一个或多个公式引用存在问题:如何修复 Apr 17, 2023 pm 06:58 PM

使用错误检查工具使用Excel电子表格查找错误的最快方法之一是使用错误检查工具。如果该工具发现任何错误,您可以更正它们并再次尝试保存文件。但是,该工具可能无法找到所有类型的错误。如果错误检查工具没有发现任何错误或修复它们不能解决问题,那么您需要尝试以下其他修复之一。要在Excel中使用错误检查工具:选择公式 选项卡。单击错误检查 工具。在发现错误时,有关错误原因的信息将出现在工具中。如果不需要,请修复错误或删除导致问题的公式。在错误检查工具中,单击下一步以查看下一个错误并重复该过程。当没

如何在 Google Sheets 中设置打印区域? 如何在 Google Sheets 中设置打印区域? May 08, 2023 pm 01:28 PM

如何在打印预览中设置GoogleSheets打印区域Google表格允许您使用三个不同的打印区域打印电子表格。您可以选择打印整个电子表格,包括您创建的每个单独的工作表。或者,您可以选择打印单个工作表。最后,您只能打印您选择的部分单元格。这是您可以创建的最小打印区域,因为理论上您可以选择单个单元格进行打印。最简单的设置方法是使用内置的Google表格打印预览菜单。您可以在PC、Mac或Chromebook上的网络浏览器中使用Google表格查看此内容。要设置Google

如何在 Excel 工作表中嵌入 PDF 文档 如何在 Excel 工作表中嵌入 PDF 文档 May 28, 2023 am 09:17 AM

通常需要将PDF文档插入Excel工作表。就像公司的项目列表一样,我们可以立即将文本和字符数据附加到Excel单元格中。但是,如果想将特定项目的解决方案设计附加到其相应的数据行怎么办?嗯,人们经常停下来思考。有时思考也不起作用,因为解决方案并不简单。深入研究这篇文章,了解如何轻松地将多个PDF文档插入Excel工作表,以及非常特定的数据行。示例场景在本文所示的示例中,我们有一个名为ProductCategory的列,它在每个单元格中列出了一个项目名称。另一列ProductSpeci

不同单元格格式太多复制不了怎么办 不同单元格格式太多复制不了怎么办 Mar 02, 2023 pm 02:46 PM

不同单元格格式太多复制不了的解决办法:1、打开EXCEL文档,然后在几个单元格中输入不同格式的内容;2、在Excel页面的左上角找到“格式刷”按钮,然后单击“格式刷”选项;3、点击鼠标左键,将格式统一设置成一致的即可。

如何从 Excel 中的数字值和文本值中删除逗号 如何从 Excel 中的数字值和文本值中删除逗号 Apr 17, 2023 pm 09:01 PM

在数值上,在文本字符串上,在错误的地方使用逗号确实会变得烦人,即使对于最大的Excel极客来说也是如此。您甚至可能知道如何摆脱逗号,但您知道的方法可能对您来说很耗时。好吧,无论您的问题是什么,如果它与您的Excel工作表中的错误位置的逗号有关,我们可以告诉您一件事,您所有的问题今天都会得到解决,就在这里!深入研究这篇文章,了解如何通过尽可能简单的步骤轻松去除数字和文本值中的逗号。希望你喜欢阅读。哦,别忘了告诉我们哪种方法最吸引你的眼球!第1节:如何从数值中删除逗号当数值包含逗号时,可能有两种情

在 Excel 中如何查找并删除合并单元格 在 Excel 中如何查找并删除合并单元格 Apr 20, 2023 pm 11:52 PM

如何在Windows上的Excel中查找合并的单元格在从数据中删除合并的单元格之前,您需要全部找到它们。使用Excel的查找和替换工具很容易做到这一点。在Excel中查找合并的单元格:突出显示要在其中查找合并单元格的单元格。要选择所有单元格,请单击电子表格左上角的空白区域或按Ctrl+A。单击主页选项卡。单击查找和选择图标。选择查找。单击选项按钮。在FindWhat设置的末尾,单击Format。在对齐选项卡下,单击合并单元格。它应该包含一个复选标记而不是一行。单击确定以确认格式

如何在 Excel 中创建随机数生成器 如何在 Excel 中创建随机数生成器 Apr 14, 2023 am 09:46 AM

如何使用 RANDBETWEEN 在 Excel 中生成随机数如果要生成特定范围内的随机数,RANDBETWEEN 函数是一种快速简便的方法。这允许您在您选择的任何两个值之间生成随机整数。使用 RANDBETWEEN 在 Excel 中生成随机数:单击您希望出现第一个随机数的单元格。键入=RANDBETWEEN(1,500)将“1”替换为您要生成的最低随机数,将“500”替换为

如何防止Excel删除前导零 如何防止Excel删除前导零 Feb 29, 2024 am 10:00 AM

自动从Excel工作簿中删除前导零是否令人沮丧?当您在单元格中输入数字时,Excel通常会删除数字前面的前导零。默认情况下,它将缺少显式格式的单元格条目视为数值。前导零在数字格式中通常被认为是无关紧要的,因此被省略。此外,前导零可能会在某些数值运算中造成问题。因此,零被自动删除。本文将教你如何在Excel中保留前导零,以确保输入的帐号、邮政编码、电话号码等数字数据格式正确。在Excel中,如何允许数字前面有零?您可以在Excel工作簿中保留数字的前导零,有多种方法可供选择。您可以通过设置单元格格

See all articles