Chart.js:多个图形的一个函数

时间:2015-05-07 01:09:19

标签: jquery chart.js

我正在使用charts.js

我有从数据库中提取的多个元素。我的目标是为每个元素附加一个图表。但是,有时页面上有30个元素,因此为每个元素编写脚本会非常痛苦。所以我想为每个#line ...

创建一个图表

这样可行,但仅适用于第一个图表(因为我使用的是.get(0)

$('#line').each(function(){
    var ctx = $(this).get(0).getContext("2d");
    new Chart(ctx).PolarArea(data);
});

但这不起作用:

$('#line').each(function(){
    var ctx = $(this).getContext("2d");
    new Chart(ctx).PolarArea(data);
});

为什么我不能在不使用.getcontext() ??

的情况下使用.get()

1 个答案:

答案 0 :(得分:5)

您的html页面中不能有多个相同的ID。因此,您不能像在此处尝试那样循环使用相同ID的数组:

$('#line').each(function(){
    var ctx = $(this).get(0).getContext("2d");
    new Chart(ctx).PolarArea(data);
});

你必须使用类而不是id。

.get(0)返回您使用jQuery搜索的元素的第一个实例。在没有首先获得元素的情况下,您无法获得上下文。你需要做的是增加' 0' 0为了检索其他实例。

这可以通过将索引和元素传递给函数来完成,如:

$('.line').each(function(index, element)

所以你的代码实际上应该是这样的:

$('.line').each(function(index, element){          
  var ctx = element.getContext("2d");
  new Chart(ctx).PolarArea(data);
});

并且您需要更新html中的canvas元素以使用class =" line"而不是id =" line"。

此外,如果您希望在每个图表上显示不同的数据,我建议创建一个数组来保存数据对象,如:

var data = [];

然后向它添加数据对象,以便它们也可以通过索引号访问,如下所示:

$('.line').each(function(index, element){          
  var ctx = element.getContext("2d");
  new Chart(ctx).PolarArea(data[index]);
});

我将这种方法用于一个页面中的三个折线图,每个折线图都有不同的数据,如下所示:

enter image description here