我正在尝试将图表从Highcharts加载到Bootstrap popover中。虽然,系列路径(带点点的所有数据)都在图表或弹出窗口的下方(或其他地方)呈现。我试图调试这个问题非常困难,似乎无法找到解决方法。
jQuery(不要感到不知所措,大部分只是Highchart选项):
$('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;
}
});
});
故障:
首先,我为每个元素创建一个popover。在content
选项中,我正在运行一个函数并返回一个值,即已完成的图表。在函数结束时,在返回之前,我将图表克隆到一个新变量,删除原始图表,并将新图表作为其原始outerHTML
返回,因为这就是Bootstrap Popovers的工作方式。
虽然,我似乎无法在popover中查看图表系列。
如果您查看以下演示,并尝试使用已注释掉的行70
运行它($largeChart.remove();
),您会注意到图表确实成功地渲染了该系列。
更多测试:
此外,如果你RUN THIS DEMO .....
Chrome - 进入开发人员工具,查找表格中的第一个td
元素,并查看svg
元素的范围,然后找到类{{1}通过Bootstrap应用...将值更改为绝对其他任何内容,系统将显示。
Firefox - 系列会一直显示,直到动画完成,然后消失。
答案 0 :(得分:2)
检查一下,我有同样的问题,我设法通过更改几行代码来修复它, 由于你将div附加到你的popover父级,你的DOM中有2个图表,因此你不应该返回outerHTML
return $largeChart;
而不是
var $finalChart = $largeChart;
$largeChart.remove();
return $finalChart[0].outerHTML;
这是工作演示
此外,您需要删除类largeChart
的所有元素以避免多个图表
我也想感谢你提问,你帮助我解决了一段时间以来一直在努力的棘手问题