const doc = document.createElementNS("http://www.w3.org/2000/svg", 'svg');
doc.setAttribute("xmlns", "http://www.w3.org/2000/svg");
doc.setAttribute("viewBox", "0 0 200 200");
doc.setAttribute("width", 200);
doc.setAttribute("height", 200);
const polygon = document.createElementNS("http://www.w3.org/2000/svg", 'polygon');
polygon.setAttribute('stroke', 'black');
polygon.setAttribute('stroke-width', 3);
polygon.setAttribute('fill', 'blue');
polygon.setAttribute('fill-rule', 'evenodd');
polygon.setAttribute('points', '150,100,59,129,115,52,115,147,59,70');
doc.appendChild(polygon);
document.getElementById('dest').appendChild(doc);
// setting up event handlers
[...document.querySelectorAll('[data-color]')].forEach((el) =>
el.addEventListener(
"click",
(e) =>
polygon.setAttribute('fill', e.target.getAttribute('data-color'))
)
);
[...document.querySelectorAll('[data-fill-rule]')].forEach((el) =>
el.addEventListener(
"click",
(e) =>
polygon.setAttribute('fill-rule', e.target.getAttribute('data-fill-rule'))
)
);
<a href="#" data-color="red">set red</a> -
<a href="#" data-color="green">set green</a> -
<a href="#" data-color="blue">set blue</a><br> Problematic, swap multiple: <a href="#" data-fill-rule="evenodd">set evenodd</a>
<a href="#" data-fill-rule="nonzero">set nonzero</a>
<div id="dest"></div>