我在桌子上用高图迷你图。这是我生成火花线的代码。它是使用php脚本生成的。所以你会在里面找到一些php变量:
$(function () {
$(document).ready(function() {
Highcharts.SparkLine = function (a, b, c) {
const hasRenderToArg = typeof a === 'string' || a.nodeName;
let options = arguments[hasRenderToArg ? 1 : 0];
const defaultOptions = {
chart: {
renderTo: (options.chart && options.chart.renderTo) || (hasRenderToArg && a),
backgroundColor: null,
borderWidth: 0,
type: 'area',
margin: [2, 0, 2, 0],
width: 40,
height: 20,
style: {
overflow: 'visible'
},
// small optimalization, saves 1-2 ms each sparkline
skipClone: true
},
title: {
text: ''
},
credits: {
enabled: false
},
xAxis: {
labels: {
enabled: false
},
title: {
text: null
},
startOnTick: false,
endOnTick: false,
tickPositions: []
},
yAxis: {
endOnTick: false,
startOnTick: false,
labels: {
enabled: false
},
title: {
text: null
},
tickPositions: [0]
},
legend: {
enabled: false
},
tooltip: {
hideDelay: 0,
outside: true,
shared: true
},
exporting: {
enabled: false
},
plotOptions: {
series: {
animation: false,
lineWidth: 2,
shadow: false,
states: {
hover: {
lineWidth: 1
}
},
marker: {
radius: 1,
states: {
hover: {
radius: 2
}
}
},
fillOpacity: 0.25
},
column: {
negativeColor: '#c3d3a4',
color: '#729d34',
borderColor: 'none'
},
bar: {
negativeColor: '#c3d3a4',
color: '#729d34',
borderColor: 'none'
}
}
};
options = Highcharts.merge(defaultOptions, options);
return hasRenderToArg ?
new Highcharts.Chart(a, options, c) :
new Highcharts.Chart(options, b);
};
const start = +new Date(),
tds = Array.from(document.querySelectorAll('td[data-sparkline]')),
fullLen = tds.length;
let n = 0;
function doChunk() {
const time = +new Date(),
len = tds.length;
for (let i = 0; i < len; i += 1) {
const td = tds[i];
const stringdata = td.dataset.sparkline;
const arr = stringdata.split('; ');
const data = arr[0].split(', ').map(parseFloat);
const chart = {};
if (arr[1]) {
chart.type = arr[1];
}
Highcharts.SparkLine(td, {
series: [{
data: data,
pointStart: 1
}],
tooltip: {
headerFormat: '<span style=\"font-size: 10px\">' + td.parentElement.querySelector('th').innerText + ':</span><br/>',
pointFormat: '<b>{point.y}</b>'
},
chart: chart
});
n += 1;
// If the process takes too much time, run a timeout to allow interaction with the browser
if (new Date() - time > 500) {
tds.splice(0, i + 1);
setTimeout(doChunk, 0);
break;
}
}
}
doChunk();
});
});
我有一些无法解决的问题:
- 我当前使用td.parentElement.querySelector('th').innerText获取工具提示中第一列的文本
如果我的桌子看起来像:
<table> <tr><th>Amsterdam</th><td>43 People</td><td data-sparkline="-5"></td></tr> <tr><th>Paris</th><td>20 People</td><td data-sparkline="2"></td></tr> </table>
它工作得很好。
但我喜欢将表结构从th更改为td:
<table> <tr><td>Amsterdam</td><td>43 People</td><td data-sparkline="-5"></td></tr> <tr><td>Paris</td><td>20 People</td><td data-sparkline="2"></td></tr> </table>
如何在工具提示“td.parentElement.querySelector('td:first????').innerText”中显示表行的第一列
- 正如你在图片中看到的,一行中的正值和负值没有相同的起点

它必须看起来像:
中间应该有一个固定的x轴,正值指向右侧,负值指向左侧,中点在所有行上都是固定的,每行的缩放比例相同。因此,值越大,条越长,值越小,条越短。