jQuery Flot无法显示图表数据

时间:2013-01-05 11:37:14

标签: jquery flot

我正在使用优秀的图表插件Flot将html页面中的字符串替换为图表。然而,不知何故情节本身并没有显示出来。

占位符:

<div class="chart" id="example1" style="width:300px; height:150px">2009:12.90,2010:12.80,2011:13.90,2012:14.50</div>
<div class="chart" id="example2" style="width:300px;height:150px">1:2,2:1,3:6,4:3</div>

jQuery代码:

$(".chart").each(function(index, value) {

    var id = this.id;

    var obj = $("#" + id).html().split(",");
    var chartdata = [];

    $.each(obj, function(i, val) {
         chartdata[i] = "[" + val.replace(":","," ) + "]";
         console.log(val);
    });

    var thechart = chartdata.join(",");
    console.log(thechart);

    var d1 = "[" + thechart + "]";
    console.log("#" + id + " -> " + d1);

    $.plot($("#" + id), [
        {
            data: d1,
            lines: { show: true, fill: true }
        },
    ]);

 });

当我用实际数据替换d1时,它可以工作。我怀疑它与数据呈现为字符串或其他东西有关。虽然无法做到这一点。我不想将数据添加到jquery调用中,因为我使用了cms,因此用户可以在编辑页面时更改图表数据。

1 个答案:

答案 0 :(得分:1)

是的,这是因为您将数据创建为一个大字符串,而不是一组值。以这一行为例:

chartdata[i] = "[" + val.replace(":","," ) + "]";

你应该使用这样的代码(大致):

values = val.split(":");
chartdata[i] = [parseInt(values[0]), parseInt(values[1])];

其余的大部分代码都是不必要的; obj已经是一个清单了。

你可以使用jQuery的'map'而不是'each'来简化整个过程;那么你甚至不需要单独的chartdata变量;像这样大致(未经测试):

$(".chart").each(function() {

    var id = this.id;
    var data = $("#" + id).html().split(",");

    $.map(data, function(point) {
        return $.map(point.split(":"), function(value) {
            return parseInt(value);
        });
    });

    $.plot("#" + id, [{
        data: data,
        lines: {
            show: true,
            fill: true
        }
    }]);
});