【发布时间】:2014-06-26 20:32:19
【问题描述】:
我有一个包含数十列和数百行的 HTML 表格。我想根据另一列的值更改一个表格单元格 (TD) 的值。 (我需要为三对列做)。由于我无法控制数据源,因此在某些浏览器中列的顺序可能会有所不同。 我采取的步骤:
for(i=0;i<3;i++){
for(j=0;j<2;j++){
if(!!(JQ("div[DisplayName='"+updateViewerFields[i][j]+"']"))){
updateViewer[i][j]=(JQ(this).find(JQ("div[DisplayName='"+updateViewerFields[i][j]+"']")).parent().index())+1;
}}}
这会将三个字段的索引位置存储在一个数组 - 'UpdateViewer' 中。三个字段的名称来自“UpdateViewerFields”。
var updateViewerFields=[["Phase 1","Phase 1 - Comments"],["Phase 2","Phase 2 - Comments"],["Phase 3","Phase 3 - Comments"]];
var updateViewer=[[0,0],[0,0],[0,0]];
现在,我遍历应用格式的每一行:
JQ(this).find("tr").each(function(){
//update data as per matrix
for(i=0;i<3;i++){
if(0!=updateViewer[i][0]){
var currentPhaseElement= JQ(this).find(JQ('td:nth-child('+updateViewer[i][0]+')'));
JQ(currentPhaseElement).attr('title',JQ(this).find(JQ('td:nth-child('+updateViewer[i][1]+')')).html());
//other stuff
}
}}
代码运行没有错误。但是在IE中代码太慢了。我什至在使用 IE 时收到警告 -
'A script on this page is causing Internet Explorer to run slowly. If it continues to run, your computer may become unresponsive. Do you want to abort the script?'
但是,相同的代码在 Chrome 中运行流畅。如何改进代码以在 IE 中以更快的响应时间达到相同的效果? PS> 请仅建议更改代码。
这是一个小提琴表示:http://jsfiddle.net/QZs2G/7/
更新:这里代码中的 JQ 是一个变量,用于在无冲突模式下运行 jquery。
var JQ=jquery.noconflict();
小提琴使用无处不在的$符号
【问题讨论】:
-
请设置一个小提琴。
-
用小提琴更新问题:jsfiddle.net/QZs2G/7
-
那么你的问题是什么?
-
" 我想根据另一列的值来改变一个单元格的值。" 仔细解释一下什么是cell,什么是列,什么值? DisplayName 是什么属性,有什么用?为什么不将
data-*属性用于自定义属性?您的演示中想要的结果是什么?你在你的 for 循环中实际上想要实现什么?数组是干什么用的? -
@RokoC.Buljan - 尝试运行小提琴。一个表格单元表示一个普通的 TD,其属性会根据其他列发生变化。该代码有效。但我需要一种更好/优化的方法来实现相同的结果。
标签: jquery html html-table