我允许用户通过点击突出显示表格中的行。
当他们点击它们时,会调用HighToggle()。
HighToggle()检查以查看td的bgcolor是否与突出显示颜色匹配,并突出显示或取消突出显示。
function HighToggle(cObj,vid,vColor,hColor) {
if ((vColor == hColor)) {
$(cObj).css('background-color','#FFFFFF'); // un-highlight
vx.push({'id' : vid, 'status' : 'off'});
} else {
$(cObj).css('background-color','#' + Highlighter.Hex); // highlight
vx.push({'id' : vid, 'status' : 'on'});
}
}
将这些存储在数组中非常重要,因为我有记录集导航,可以删除行(从视图中)并通过JSON加载新行。否则,当我想将数据提交给服务器时,我可以循环遍历表行并构建预先提交的数组。
所以,这样可以正常工作,除非它在每次突出显示或未突出显示某些内容时添加重复的ID,因此它可能如下所示:
1: on, 7: on, 7: off, 2: on, 4: on, 1: off, 3: on, 1: on, 2: off.
这只是一团糟。
按照上面导致该数组的相同点击过程,我最终想要的是......
1: on, 7: off, 2: off, 4: on, 3: on
如果结果集只有10行,则行从不与(5,6,8,9,10)交互,根本不需要在数组中有条目。 我正在寻找一种快速的方法来搜索我的数组并覆盖行(如果存在的话)。
我想到了一个我尚未尝试实施的解决方案,因为我觉得可能有更好的东西。
我可以制作一个单独的数组,让我们说它被称为vindexes。 Vindexes可以使用作为vid变量传递的ID,如此...
vindexes[vid] = vx.length;
HighToggle可以检查vindexes [vid]是否存在,如果存在,则使用该id覆盖而不是vx.push。
它会起作用(不会吗?)但它重新发明轮子了吗?有更快的方法吗?这个功能将在每一页上大量使用。
我已经找到了grep函数,因为我使用的是jQuery,但我不认为grep适用于我,因为我想知道找到ID的位置的索引。
感谢您的任何建议。
编辑:这是我自己设计的内容,但我认为答案是更优雅,更明智的解决方案。
function HighToggle(cObj,vid,vColor,hColor) {
vid = Number(vid);
if (!(vid in vi)) {
inIndex = vx.length;
} else {
inIndex = vi[vid];
}
if ((vColor == hColor)) {
$(cObj).css('background-color','#FFFFFF');
vi[vid] = inIndex;
vx[inIndex] = {'id' : vid, 'status' : 'off'};
} else {
vi[vid] = inIndex;
$(cObj).css('background-color','#' + Highlighter.Hex);
vx[inIndex] = {'id' : vid, 'status' : 'on'};
}
}
我的解决方案,答案对我的使用都有效,但也许其他人会遇到这种情况,并从我提供的代码中受益。
答案 0 :(得分:3)
您可以使用对象:
var vx = {};
function HighToggle(cObj,vid,vColor,hColor) {
if ((vColor == hColor)) {
$(cObj).css('background-color','#FFFFFF'); // un-highlight
vx[vid] = "off";
} else {
$(cObj).css('background-color','#' + Highlighter.Hex); // highlight
vx[vid] = "on";
}
}
然后,如果您以后需要一个数组(用于提交到服务器等):
var vxArray = [];
for (var key in vx) {
vxArray.push({id: key, status: vx[key]});
}