Chart.js: 一函数多图
Chart.js: One function for multiple graphs
我正在使用 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);
});
为什么不使用.get()
就不能使用.getcontext()
??
您的 html 页面中不能有多个相同的 ID。因此,您不能像您在此处尝试的那样循环访问相同 ID 的数组:
$('#line').each(function(){
var ctx = $(this).get(0).getContext("2d");
new Chart(ctx).PolarArea(data);
});
您必须使用 classes 而不是 id。
.get(0) returns 您使用 jQuery 搜索的元素的第一个实例。如果不先获取元素,就无法获取上下文。您需要做的是增加“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]);
});
我将此方法用于一页中的三个折线图,每个都有不同的数据,如下所示:
我正在使用 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);
});
为什么不使用.get()
就不能使用.getcontext()
??
您的 html 页面中不能有多个相同的 ID。因此,您不能像您在此处尝试的那样循环访问相同 ID 的数组:
$('#line').each(function(){
var ctx = $(this).get(0).getContext("2d");
new Chart(ctx).PolarArea(data);
});
您必须使用 classes 而不是 id。
.get(0) returns 您使用 jQuery 搜索的元素的第一个实例。如果不先获取元素,就无法获取上下文。您需要做的是增加“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]);
});
我将此方法用于一页中的三个折线图,每个都有不同的数据,如下所示: