0

優れたチャート プラグイン 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 を実際のデータに置き換えると、機能します。文字列などとして提示されているデータと関係があると思われます。しかし、それを正しくすることはできません。ユーザーがページの編集中にチャートデータを変更できるようにcmsを使用しているため、jquery呼び出しにデータを追加したくありません。

4

1 に答える 1

1

はい、それは、値の配列ではなく、大きな文字列としてデータを作成しているためです。例として、次の行を取り上げます。

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

代わりに、次のようなコードを (大まかに) 使用する必要があります。

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

残りのコードのほとんどは不要です。obj はすでにリストです。

「each」の代わりに jQuery の「map」を使用することで、全体をより単純にすることができます。そうすれば、別個の 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
        }
    }]);
});
于 2013-01-05T15:03:04.923 に答える