首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针对下一列的下一个单元格,可处理更改单元格颜色

针对下一列的下一个单元格,可处理更改单元格颜色
EN

Stack Overflow用户
提问于 2015-12-16 05:11:13
回答 2查看 3.3K关注 0票数 3

我有一个handsontable如下所示:

代码语言:javascript
复制
$(document).ready(function () {
$("#example1grid").handsontable({
    colHeaders: [],        
  });

  var data = [
    ["2008", 10, 11, 12, 13],
    ["2009", 20, 0, 14, 13],
    ["2010", 30,35, 12, 13]
  ];

  $("#example1grid").handsontable("loadData", data);   

});

我需要的是:

我的B列的值:10,20,30和C列-> 11,0,35

如果值在细胞C>值在B细胞中,则B细胞的背景色应为红色,,否则细胞B的背景颜色应为绿色。

结果细胞B中的,值为10,30 ->红和20 -> Green

检查小提琴:小提琴

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-16 05:34:35

尝试:

代码语言:javascript
复制
$(document).ready(function () {

    $("#example1grid").handsontable({
        colHeaders: ["", "Kia", "Nissan", "Toyota", "Honda"],        
      });

      var data = [
        ["2008", 10, 11, 12, 13],
        ["2009", 20, 11, 14, 13],
        ["2010", 30, 15, 12, 13]
      ];

      $("#example1grid").handsontable("loadData", data);   
        //$('td').css('background-color', 'red');
    });
    Handsontable.hooks.add('afterRender', function(){
      var f = $('.htCore').find('tbody tr td:nth-child(2)');
      var s = $('.htCore').find('tbody tr td:nth-child(3)');
         f.each(function(i,v){
         if (s.eq(i).text() > $(v).text()) {
           $(v).css({'background':'red'});
         } else {
           $(v).css({'background':'green'});
         }
         });
    });

http://jsfiddle.net/2ra8gwa7/1/

或:

代码语言:javascript
复制
  $("#example1grid").handsontable("loadData", data);   
    //$('td').css('background-color', 'red');
});
Handsontable.hooks.add('afterRender', function() {
var d = this;
var col1 = d.getDataAtCol(1);
var col2 = d.getDataAtCol(2);
$.each(col1,function(i,v){

 if (col2[i] > v ) {
  $(d.getCell(i,1)).css({'background':'red'});
 } else {
 $(d.getCell(i,1)).css({'background':'green'});
 }
});

http://jsfiddle.net/L77wjmk9/

票数 1
EN

Stack Overflow用户

发布于 2015-12-17 19:02:48

根据我对非DOM操作解决方案的评论,这里有一个使用本机Handsontable方法的解决方案:

http://jsfiddle.net/zekedroid/2ra8gwa7/2/

重要的一点是渲染器。当尝试应用不同的呈现行为,而不是在呈现后操作DOM时,您应该使用以下自定义呈现器:

代码语言:javascript
复制
function colorRenderer(instance, td, row, col, prop, value, cellProperties) {
    Handsontable.renderers.TextRenderer.apply(this, arguments);

            // get reference to data
    var data = instance.getData();
    // grab the value of the current row at the column we want to compare to
    var valueAtC = data[row][2];
    if (valueAtC > value) {
        td.style.backgroundColor = 'red';
    } else {
        td.style.backgroundColor = 'green';
    }

    return td;
};

正如您所看到的,我们所要做的就是只将此呈现器应用于B列,因此每当呈现该列上的任何单元格时,它都会检查同一行的值,但在列C上。然后,我们直接将更改应用到td,这确保了所有Handsontable方法都可以访问这个DOM元素,而不是手动操作的!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34304350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档