使用jQuery动态创建图形

时间:2015-05-18 05:52:39

标签: javascript jquery chart.js

我有一个页面列出了大约30个投资组合,每个投资组合有3个股票。我正在尝试创建一个与每个投资组合一起使用的饼图,其中饼图将由该投资组合中的三只股票组成。

股票的价值会打印到屏幕上,因此我可以使用jQuery .text().slice()轻松抓住它们。

当我想要更改图表中的数据以对应每个投资组合(或股票组)时,我的问题就出现了。

<script>

  $(document).ready(function() {

    $.each($('.stocks-data'), function(){
        $this = $(this);
        $a_base = $this.children(".a-card").text();
        $a_pie = $a_base.].replace ( /[^\d.]/g, '' );;
        console.log($a_pie)
        $b_base = $this.children(".b-card").text();
        $b_pie = $b_base.replace ( /[^\d.]/g, '' );
        console.log($b_pie)
        $c_base = $this.children(".c-card").text();
        $c_pie = $c_base.replace ( /[^\d.]/g, '' );
        console.log($c_pie)

        var data = [
        {
            value: $a_pie,
            color:"#F7464A",
            highlight: "#FF5A5E",
            label: "Stock A"
        },
        {
            value: $b_pie,
            color: "#46BFBD",
            highlight: "#5AD3D1",
            label: "Stock B"
        },
        {
            value: $c_pie,
            color: "#FDB45C",
            highlight: "#FFC870",
            label: "Stock C"
        }
        ]

        $this.children('.stocks-pie'), (function(index, element){          
            var ctx = element.getContext("2d");
            new Chart(ctx).Doughnut(data ,{animateRotate: false});
        });

    });

});

page.php

#in a php echo
<div class=".stocks-data">
    <div class="name-container">
        <div class="name">Name:  '.$name.'</div>
    </div>
    <div class="a-card">Stock A:  '.$stocka.'g</div>
    <div class="b-card">Stock B:  '.$stockb.'g</div>
    <div class="c-card">Stock C:  '.$stockc.'g</div>
    <canvas class="stocks-pie" height="80" width="100"></canvas>
</div>

示例数据:

.$stocka. = 14.2 .$stockb. = 2.8 .$stockc. = 3.9

问题:

我可以让图表工作,但只显示每个投资组合图表的最后投资组合数据,这显然不是我想要的。如何使用自己的数据为每个投资组合创建图表?

补充信息:

这是使用Charts.js

1 个答案:

答案 0 :(得分:3)

工作jsfiddle - http://jsfiddle.net/6cgo4opg/45/

修正了以下

$a_pie = $a_base.].replace ( /[^\d.]/g, '' );;

应该是

$a_pie = $a_base.replace(/[^\d.]/g, '');

$this.children('.stocks-pie'), (function(index, element){   

应该是

$this.children('.stocks-pie').each(function (index, element) {

<div class=".stocks-data">

应该是

<div class="stocks-data">