查找 ID 元素的数量并添加到数组
Finding number of ID elements and add to array
我正在使用 chart.js 创建一个图表,该图表从页面中的 ID 中获取数据。当我为它编写 Javascript 时,我有一个特定的用例,而我编写的内容根本不可扩展。
最初数组总是包含 8。
现在我需要它来计算页面上有多少项目(甚至可以超过 8 个或更少)
以下完全适用于 8 个项目,并且只需要可扩展性。
<canvas id="ent1Graph"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js">
const graphData = Array.from(
{ length: 8 },
(_, i) => Number(document.getElementById('E1_INV_Funds' + i).textContent)
);
const graphLabels = Array.from(
{ length: 8 },
(_, i) => String(document.getElementById('E1_INV_Label' + i).textContent)
);
var ctx = document.getElementById('ent1Graph').getContext('2d');
var chart = new Chart(ctx, {
type: 'doughnut',
toolTips:{
bodyFontSize: 30,
},
data: {
indexLabelFontSize: 20,
labels: graphLabels,
datasets: [{
label: "Dataset",
backgroundColor: [
'rgb(255, 99, 132)',
'rgb(89, 192, 123)',
'rgb(98, 130, 164)',
'rgb(137, 124, 196)',
'rgb(255, 213, 0)',
'rgb(65, 196, 255)',
'rgb(175, 215, 221)',
'rgb(255, 177, 109)'
],
borderColor: 'rgb(255, 255, 255)',
data: graphData,
}]
},
options: {
legend: {
display: false
}
}
});
</script>
所以我想我需要知道的是找到长度并只使用它。我假设我需要根据项目的数量以某种方式填充颜色数组。
如果我可以为标签分配颜色,这样我就可以使用自定义图例而不是默认的 chart.js 图例,那就太好了。
希望这是有道理的。
如果需要更多信息来回答问题,请告诉我。
谢谢
如果硬编码长度是问题,您可以使用
获取所有元素的长度
const numElem = document.querySelectorAll('*[id^="E1_INV_Funds"]').length
您的数组可以将其用于任意数量的元素-
const graphData = Array.from(
{ length: numElem },
(_, i) => Number(document.getElementById('E1_INV_Funds' + i).textContent)
);
const graphLabels = Array.from(
{ length: numElem },
(_, i) => String(document.getElementById('E1_INV_Label' + i).textContent)
);
背景颜色 属性 也不需要硬编码,因为元素的数量未知。您可以使用函数 return rgb 字符串数组。例如:
backgroundColor: function (){
var rgbArray = [];
for(vari=0 ;i<numElem; i++) {
rgbArray.push('rgb(255,255,255)');//Need to have some logic to assign rgb
}
return rgbArray;
}
我正在使用 chart.js 创建一个图表,该图表从页面中的 ID 中获取数据。当我为它编写 Javascript 时,我有一个特定的用例,而我编写的内容根本不可扩展。
最初数组总是包含 8。
现在我需要它来计算页面上有多少项目(甚至可以超过 8 个或更少)
以下完全适用于 8 个项目,并且只需要可扩展性。
<canvas id="ent1Graph"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js">
const graphData = Array.from(
{ length: 8 },
(_, i) => Number(document.getElementById('E1_INV_Funds' + i).textContent)
);
const graphLabels = Array.from(
{ length: 8 },
(_, i) => String(document.getElementById('E1_INV_Label' + i).textContent)
);
var ctx = document.getElementById('ent1Graph').getContext('2d');
var chart = new Chart(ctx, {
type: 'doughnut',
toolTips:{
bodyFontSize: 30,
},
data: {
indexLabelFontSize: 20,
labels: graphLabels,
datasets: [{
label: "Dataset",
backgroundColor: [
'rgb(255, 99, 132)',
'rgb(89, 192, 123)',
'rgb(98, 130, 164)',
'rgb(137, 124, 196)',
'rgb(255, 213, 0)',
'rgb(65, 196, 255)',
'rgb(175, 215, 221)',
'rgb(255, 177, 109)'
],
borderColor: 'rgb(255, 255, 255)',
data: graphData,
}]
},
options: {
legend: {
display: false
}
}
});
</script>
所以我想我需要知道的是找到长度并只使用它。我假设我需要根据项目的数量以某种方式填充颜色数组。
如果我可以为标签分配颜色,这样我就可以使用自定义图例而不是默认的 chart.js 图例,那就太好了。
希望这是有道理的。
如果需要更多信息来回答问题,请告诉我。 谢谢
如果硬编码长度是问题,您可以使用
获取所有元素的长度const numElem = document.querySelectorAll('*[id^="E1_INV_Funds"]').length
您的数组可以将其用于任意数量的元素-
const graphData = Array.from(
{ length: numElem },
(_, i) => Number(document.getElementById('E1_INV_Funds' + i).textContent)
);
const graphLabels = Array.from(
{ length: numElem },
(_, i) => String(document.getElementById('E1_INV_Label' + i).textContent)
);
背景颜色 属性 也不需要硬编码,因为元素的数量未知。您可以使用函数 return rgb 字符串数组。例如:
backgroundColor: function (){
var rgbArray = [];
for(vari=0 ;i<numElem; i++) {
rgbArray.push('rgb(255,255,255)');//Need to have some logic to assign rgb
}
return rgbArray;
}