首页 文章

Bootstrap Popover下面的Highchart数据呈现

提问于
浏览
2

我正在尝试将图表从Highcharts加载到Bootstrap popover中 . 虽然,系列路径(带点点的所有数据)都在图表或弹出窗口的下方(或其他地方)呈现 . 我试图调试这个问题非常困难,似乎无法找到解决方法 .

jQuery (don't be overwhelmed, most of it is just Highchart options):

$('td.chartSection').each(function () {
    var $thisElem = $(this);
    $thisElem.popover({
        placement: 'top',
        trigger: 'hover',
        html: true,
        container: $thisElem,
        delay: {
            hide: 500
        },
        content: function () {
            //Loading all the chart data and dates
            var chartData = [10.82, 11.79, 12.89, 14.01, 13.01, 10.11, 9.11, 7.02, 8.00, 10.55, 9.00, 11.20, 13.67, 13.56, 17.39, 18.34, 19.90, 19.23, 18.29, 17.10, 18.20, 18.29];
            var chartDates = ["01 Apr", "02 Apr", "03 Apr", "04 Apr", "05 Apr", "06 Apr", "07 Apr", "08 Apr", "09 Apr", "10 Apr", "11 Apr", "12 Apr", "13 Apr", "14 Apr", "15 Apr", "16 Apr", "17 Apr", "18 Apr", "19 Apr", "20 Apr", "21 Apr", "22 Apr"];

            //Finding the minimum and maximum values within the data
            var maxi = Math.max.apply(Math, chartData);
            var mini = Math.min.apply(Math, chartData);

            $thisElem.append('<span class="largeChart"></span>');

            var $largeChart = $('.largeChart');

            $largeChart.highcharts({
                series: [{
                    data: chartData,
                    zIndex: 99999
                }],
                chart: {
                    type: 'area',
                    width: 700,
                    height: 300
                },
                title: {
                    text: ''
                },
                xAxis: {
                    categories: chartDates
                },

                legend: {
                    enabled: false
                },
                yAxis: {
                    max: maxi,
                    min: mini,
                    labels: {
                        formatter: function () {
                            return this.value;
                        }
                    },
                    title: {
                        text: null
                    },
                },
                tooltip: {
                    pointFormat: '${point.y}'
                },

                credits: {
                    enabled: false
                },
                exporting: {
                    enabled: false
                }
            });

            var $finalChart = $largeChart;

            $largeChart.remove();


            return $finalChart[0].outerHTML;
        }
    });
});

Breakdown:

首先,我为每个元素创建一个popover . 在 content 选项中,我正在运行一个函数并返回一个值,即已完成的图表 . 在函数结束时,在返回之前,我将图表克隆到一个新变量,删除原始图表,并将新图表作为原始图表返回 outerHTML ,因为这就是Bootstrap Popovers的工作原理 .

虽然,我似乎无法查看popover中的图表系列 .

如果您查看下面的演示,并尝试使用行 70 注释掉( $largeChart.remove(); )来运行它,您会注意到图表确实成功地渲染了该系列 .

More Testing:

此外,如果你RUN THIS DEMO .....

Chrome - 进入开发人员工具,找到表格中的第一个 td 元素,并查找 svg 元素的范围,然后找到通过Bootstrap应用的类 svg:not(:root) ...将值更改为绝对其他任何内容,系列将是显示 .

Firefox - 系列会一直显示,直到动画完成,然后它就会消失 .

WORKING DEMO

1 回答

  • 2

    检查一下,我有同样的问题,我设法通过更改几行代码修复它,因为你将div附加到你的popover父级,你的DOM中有2个图表,因此你不应该返回outerHTML

    return $largeChart;
    

    代替

    var $finalChart = $largeChart;
    $largeChart.remove();
    return $finalChart[0].outerHTML;
    

    这是工作演示

    http://jsfiddle.net/J88gH/3/

    您还需要删除类 largeChart 的所有元素以避免多个图形

    我也想感谢你提问,你帮我解决了一段时间以来一直在努力解决的棘手问题

相关问题