【问题标题】:How to make jQGrid ignore an inner table如何使 jQGrid 忽略内部表
【发布时间】:2017-03-06 10:11:18
【问题描述】:
在我的工作中,我们有一些非常旧的数据表,我们正在尝试将它们转换为 jqGrid。遗憾的是,并非所有的表都可以在 jqGrid 中从头开始重新创建,因此我们使用 tableToGrid 将表与 jqGrid 中的数据进行转换,并且至少具有一些功能,如排序和 css 样式。
但是我们发现我们的一个表有问题:这个表在某些情况下使用嵌套表显示信息,在这种情况下,tableToGrid 崩溃了,因为他无法检测到内表的 td 不属于外部表,所以他添加到外部表。结果?一团糟。
所以,我的问题是:考虑到限制(例如,不能使用 SubGrid,因为日期已经显示在 html 上),你们中的任何人都知道告诉 tableToGrid 忽略“内部”表的方法吗?我认为这里的关键是找到一种方法来为外部和内部表调用 tableToGrid,而无需干预另一个调用。
问候
【问题讨论】:
标签:
jquery
html
css
jqgrid
【解决方案1】:
既然你说
一种告诉 tableToGrid 忽略“内部”表格的方法
您似乎对保留和使用它们的内容不感兴趣(至少在转换操作期间)。
因此,您可以只在转换操作之前插入 :
$('table table').remove();
显然,您可能需要写出比table table 更精确的内容,具体取决于整个上下文。
【解决方案2】:
您的问题的主要原因是tableToGrid 的使用,这是多年前创建的 jqGrid 插件,几乎没有更改或维护。例如,插件在循环中使用addRowData(请参阅the line),它的运行速度非常慢。你描述的问题的根源是代码的the line
jQuery('td', jQuery(this)).each(function() {
可以改成
jQuery(this).children('td').each(function() {
例如或只是
jQuery(this.cells).each(function() {
(有关每个<tr> 的cells 集合,请参见here。可以只使用this.cells[i] 访问行的第i 个单元格的innerHTML)
tableToGrid 的许多代码部分都面向非常特定的网格结构,其中复选框允许将此类网格转换为带有multiselect: true 选项的网格。是你需要的吗?
tableToGrid 的代码由两个主要部分组成:第一个部分从现有的<table> 中读取数据并将数据保存在项目数组中。第二部分使用数据创建网格。如果您知道现有表的结构,那么您可以以非常简单的方式创建tableToGrid 的替换。我建议你这样做。