【问题标题】:How to display stackbarchart in table foreach row?如何在表格的每一行中显示堆栈条形图?
【发布时间】:2020-02-14 04:28:01
【问题描述】:

我有表格和 5 列,其中一列中有 StackBarChart。 基本上我想做的就是这个。 有没有办法循环图表并为每一行显示一个? 我参考了这个link 但还是不行

下面是我的代码

<table class="table">
<tr>
            <th>Name</th>
            <th>Total MD</th>
            <th>Total LR</th>
            <th>Total LB</th>
            <th> Graph</th>
</tr>
@foreach($detail_laka as $laka)
  </tr>
     <td>{{$laka->name}}</td>
     <td>{{$laka->total_md}}</td>
     <td>{{$laka->total_lb}}</td>
     <td>{{$laka->total_lr}}</td>
     <td></td> <!--StackBarChart-->
  </tr>
@endforeach

感谢您的帮助

【问题讨论】:

  • 示例使用dataTable你要不要使用?
  • 是的,当然,不管有什么想法,我都会努力实现目标。有没有链接/来源可以做到这一点? @AndySong

标签: javascript jquery laravel charts highcharts


【解决方案1】:

JSFiddle我想我大部分时间都在工作,您可能需要稍微调整一下,但图表应该可以工作。

.bar-chart-bar {
  background-color: #e8e8e8;
  display: block;
  position: relative;
  width: 100%;
  height: 20px;
}

.bar {
  float: left;
  height: 100%;
}

.bar1 {
  background-color: green;
}

.bar2 {
  background-color: yellow;
}

.bar3 {
  background-color: red;
}

.squareRed {
  display: inline-block;
  height: 10px;
  width: 10px;
  background-color: red;
}

.squareGreen {
  display: inline-block;

  height: 10px;
  width: 10px;
  background-color: green;
}

.squareYellow {
  display: inline-block;

  height: 10px;
  width: 10px;
  background-color: yellow;
}

.ib {
  display: inline-block;
}
function getInt(n) {
  var parsed = parseInt(n);
  return isNaN(parsed) ? 0 : parsed;
}

$(function() {
  $("#dTable").dataTable({
    "columns": [{
        "title": "Name"
      },
      {
        "title": "Total MD"
      },
      {
        "title": "Total LR"
      },
      {
        "title": "Total LB"
      },
      {
        "title": "Graph",
        "sortable": false,
        "render": function(data, type, row, meta) {
          return $("<div></div>", {
            "class": "bar-chart-bar"
          }).append(function() {
            var bars = [];
            var total = row.reduce((a, c) => getInt(a) + getInt(c));
            for (var i = 1; i < row.length; i++) {
              bars.push($("<div></div>", {
                "class": "bar " + "bar" + i
              }).css({
                "width": (row[i] / total) * 100 + "%"
              }))
            }
            return bars;
          }).prop("outerHTML")
        }
      }
    ]
  });
});


<table id="dTable" class="table table-striped table-bordered" cellspacing="0" width="100%">
    <tbody>
        @foreach($detail_laka as $laka)
        </tr>
        <td>{{$laka->name}}</td>
        <td>{{$laka->total_md}}</td>
        <td>{{$laka->total_lb}}</td>
        <td>{{$laka->total_lr}}</td>
        <td></td> <!--StackBarChart-->
        </tr>
        @endforeach
    </tbody>
      <tfoot>
    <tr>
      <th colspan="5" style="text-align:right">
        <div class="ib">MD: </div>
        <span class="squareRed"></span>
        <div class="ib">LR: </div>
        <span class="squareGreen"></span>
        <div class="ib">LB: </div>
        <span class="squareYellow"></span>
      </th>
    </tr>
  </tfoot>
</table>

【讨论】:

  • 您好,感谢您的回答。这很有帮助。但我还有一个问题。如何使该标签如上图所示? (红色 = MD,绿色 = LR,黄色 = LB)?
  • @chaeusangchen 这只是 html 和 css,有很多方法可以做到这一点,我已经更新了我的答案,这只是一种方法。
  • 谢谢,还有一个问题。当我在数据表中调出 50 行时。有一个重复的 tablehead。喜欢这张图片link。如何解决?
  • @chaeusangchen,奇怪,我现在没有电脑,一小时内应该可以试试
  • 我会尝试修复它并等待您的答复,抱歉打扰了。我是使用数据表的初学者:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多