我有一个手持网格,但这个网格比屏幕宽。这是对它的外观的捕捉:
如您所见,我有一个滚动条,因为网格太宽。
用户在此网格中插入一些数据,并在ajax中发出请求以测试内容(必填字段,数字字段......)当出现错误时,我返回一个数字以了解哪个单元格不正确。我使用这个数字:
$(cells).eq(jsonobject[item]-11).css("background-color","red");
使用.eq
功能,我可以选择我想要的单元格。但是当网格比屏幕宽时,我觉得每个单元格的索引都被移动了。
这是我的想法的精彩草图:
因此索引是屏幕的依赖项,但不是网格的依赖项。
我怎么能克服这个问题?
编辑:
我宣布热卖的代码:
var container = document.getElementById('tab_traitement');
var hotTraitement = new Handsontable(container, {
data: data_traitement,
stretchH: 'all',
minSpareRows: 1,
observeChanges : true,
rowHeaders: false,
colHeaders: false,
contextMenu: true,
height: 550,
... //more options
在ajax返回中,我得到一个值数组,其中包含一些索引,其中数据不正确,我尝试着色问题的单元格。所以我试着这样:
for(var i=1; i<(data_traitement[0].length);i++ )
{
for(var item in jsonobject)
{
if((item % 2 ) == 0) //Si l'indice est pair, on affiche la couleur
{
hotTraitement.getCell(i,jsonobject[item]-j).css("background-color","red"); //Here, firebug tells me "hotTraitement is undefined"
}else
{
$(cells).eq(jsonobject[item-1]-1).qtip({
content : '<div id="bulle">'+jsonobject[item]+'</div>',
position: {
adjust: {
x: -100
}
},
style: {
classes: 'myCustomClass',
def: false
}
});
}
}
j = j+3; //Just to loop through the rows (I have 3 cells in a row)
}
答案 0 :(得分:0)
首先,横向发生虚拟渲染,这意味着如果你有一个包含许多列的表,那么大多数都没有被渲染,因此jquery永远不会找到它们。
现在,为了更有效地做到这一点,我只需使用HOT方法获取单元格:
hot.getCell(row,col);
这将返回给你TD,之后你可以像你要求的那样尝试做css。
但是,我并不认为这是最好的方法,因为物理修改DOM并不能与Handson很好地合作,因为它经常重新渲染。相反,您应该在每个单元格上设置自定义渲染器以响应您的验证工作。一个简单的解决方案是使一个带有单元坐标的数组应标记为&#34;无效&#34;。然后,自定义渲染器可以询问当前单元格坐标是否在此数组中,如果是,请按照上面的步骤应用css逻辑。而且仅供参考,Handson拥有精彩的验证功能,我强烈推荐使用它。如果验证失败,它将为您应用类名,因此甚至不需要进行任何花哨的单元格查找,只需添加您想要的类,并在CSS文件中附加您想要的任何样式。