I have SVG elements (g, path, polygon) with unique IDs for each, but they share the same class.
<svg>
<!-- 1002027 -->
<polygon id="_1002027" data-name="1002027" class="site" points="1708.49 1009.6 1719.01 1018.1 1752.71 1014.51 1761.21 1003.99 1757.63 970.29 1747.1 961.79 1713.41 965.37 1704.9 975.9 1708.49 1009.6"/>
<!-- 1002028 -->
<polygon id="_1002028" data-name="1002028" class="site" points="1708.49 1009.6 1719.01 1018.1 1752.71 1014.51 1761.21 1003.99 1757.63 970.29 1747.1 961.79 1713.41 965.37 1704.9 975.9 1708.49 1009.6"/>
<!-- ... -->
</svg>
Then I want the corresponding div to be displayed if the element is clicked, and to be hidden if the user clicks outside the element.
<div id="content_1002027" class="svgcontent"">Text Here</div>
<!-- and -->
<div id="content_1002028" class="svgcontent"">Text Here</div>
<!-- ... -->
Now I can achieve this by this script:
// Show 1002027
document.getElementById('_1002027').addEventListener('click', function (event) {
document.getElementById("content_1002027").style.display = "block";
}, false);
// Show 1002028
document.getElementById('_1002028').addEventListener('click', function (event) {
document.getElementById("content_1002028").style.display = "block";
}, false);
document.addEventListener('click', function clickOutside(event) {
// Hide 1002027
if (!document.getElementById('_1002027').contains(event.target)) {
document.getElementById("content_1002027").style.display = 'none';
}
// Hide 1002028
if (!document.getElementById('_1002028').contains(event.target)) {
document.getElementById("content_1002028").style.display = 'none';
}
});
However, with this method, I have to repeat this script for each id. If I had 60 of the elements, there would be a lot of code.
How can I achieve this for all id by writing just once?