I’m using the ‘HTML panel’ plugin by aidanmountford, which contains a panel that allows you to enter some JS (and CSS and HTML). Its been a few months since I’ve done any work in Javascript, and I can’t seem to figure out how to change an element by ID in this panel.
My simplified and functioning HTML is:
<svg id='svg_container' width='100%' height='4rem'>
<g class="bars">
<rect id='thermom_cont' class='thermom'fill='#999' width='100%' height='10'y="7"></rect>
<rect id='procA_ID' class='thermom' fill='#1ca4c2' width='10%' height='10' y="7"></rect>
<g>
<g>
<text id='dateLabel' fill='#BBB' x='94%' y='50'>Date Label</text>
</g>
</svg>
In this HTML I have two overlapping bars (on the same y axis), one long grey and the other short and blueish(#1ca4c2), and a date label in the bottom corner. The JS that I am trying is unable to find the element by ID.
I have tried addressing one of the id’s directly using:
this.$.dateLabel.innerHTML = "Hello World";
// or
$.dateLabel.innerHTML = "Hello World";
for both of those the console spits out: “TypeError: Cannot read property ‘dateLabel’ of undefined”
I’m not sure how to interpret the instructions which say:
htmlnode
passes the HTMLElement of the html content on the panel. THis allows direct access to and editing of the html content:htmlnode.innerHTML = “Hello World”;
I tried:
htmlnode.dateLabel.innerHTML = "Hello World"
and I got the same type error.
The last little bit of instructions included in this panel are:
JavaScript Code:
onInit(ctrl, htmlnode)
- This code is executed once , right after the first initialization of the SVG
- @param {MetricsPanelCtrl} ctrl Instance of current grafana panel object.
- @param {HTMLElement} htmlnode Html DOM node containing html data.
I’m not 100% sure how to interpret this, I’ve tried substituting in the ID name for ‘HTMLElement’ or ‘htmlnode’ with no luck.
I have only had success generating an html string (called ‘html’) and executing:
htmlnode.innerHTML = html
But I would really like to address an element by ID or Class, if possible. Am I misinterpreting this app, is it possible to use ID or Class to change an element?