'Trigger click on SVG image

I'm having a play with a SVG image to see if I can create a map for my website. I grabbed the image from a 3rd party site, and now I'm just trying to implement it. Here is a fiddle of what I have:

https://jsfiddle.net/hL1weg3o/1/

So basically the CSS is:

svg, svg * {
    pointer-events: none;
}
#map {
  display: block;
  text-indent: -9999px;
  width: 100% ;
  height: 600px;
}

HTML:

<!DOCTYPE html>
<html lang="en">
  <head>
  </head>
  <body>

    <div id="mapContainer">
        <object id="map" data="https://chambresdhotes.org/2018/franceHigh.svg" type="image/svg+xml"></object>
    </div>


  </body>
</html>

..and then I'm trying to capture the clicks with:

document.getElementById("FR-A").addEventListener('click', function (event) { test() });

The paths in the SVG look something like:

<path id="FR-A" title="Alsace" class="land"
 d="M498.91,208.16L502.37,206.45L501.41,203.92L502.77,202.75L502.05,202.16L503.38,197.19L505.73,195.84L508.91,190.38L508.19,188.16L513.99,177.9L513.19,176.07L510.57,176.47L508.87,175.28L510.21,173.71L509.24,172.42L510.58,167.67L509.44,165.85L511.28,166.21L508.42,164.55L512.58,164.35L514.79,162.8L518.37,156.06L516.75,155.91L515.79,154.05L518.79,149.33L516.06,146.78L516.51,145.88L512.08,144.43L510.96,147.15L508.96,148.25L509.41,146.56L507.87,146.28L507.83,144.51L509.66,143.35L507.81,143.57L507.73,142.59L503.83,141.4L503.38,138.89L504.82,138.9L505.31,137.13L507.05,137.45L508.51,130.56L509.79,129.8L510.96,134.31L517.94,136.33L517.8,137.48L519.26,138.25L524.5,136.67L528.02,138.94L529.75,137.39L532.17,131.3L532.17,131.3L536.13,131.11L536.25,131.93L538.69,130.52L541.69,132.56L544.49,131.02L551.1,135.31L556.89,136.82L553.43,140.7L550.96,147.12L546.08,149.96L545.75,152.17L540.57,157.24L538.95,160.81L539.2,165.15L537.64,166.68L536.15,172.66L536.66,176.85L534.52,178.43L533.41,183.41L529.69,189.69L529.39,195.05L531.58,198.9L528.85,204.64L527.73,210.8L528.49,213.6L526.98,215.84L530.29,221.55L529.95,223.31L526.45,225.53L527.76,226.24L526.39,226.69L526.95,228.06L526.01,229.02L523.64,228.23L523.2,229.14L524.64,229.71L521.77,232.09L519.37,231.53L515.83,232.75L515.37,231.65L512.79,231.37L514.11,228.3L511.23,227.75L511.23,227.75L511.67,226.42L509.3,222.24L505.95,221.67L507.63,217.4L507.24,214.26L503.23,211.3L500.16,210.59z"/>

Am I misunderstanding how you capture a click on a div? Basically I need to grab the value of "title" from the path clicked on, and then my JS can work out where to send the user.

Thanks!



Solution 1:[1]

@MSC's answer was what I needed. (Upvoted the OP's question and @MSC's answer.) Here's a vanilla JavaScript version in case anyone needs a quick cut and paste:

function fetchAndAssignSvg(url, element) {

    // Validate parameters
    if (typeof url !== "string" || url.length === 0) { return; }
    if (typeof element === "undefined") { return; }

    // See the following link to use 'XMLHttpRequest' instead of Fetch API
    // stackoverflow.com/questions/17901116/i-need-the-equivalent-of-load-to-js/17901198

    fetch(url)
        .then(response => {
            if (!response.ok) {
                console.log(response);
                return;
            }
            response.text().then(text => {
                element.innerHTML = text;
                element.addEventListener("pointerdown", pointerdownListener);
            });
        })
        .catch(error => {
            console.log(error);
        });
}

function pointerdownListener(e) {
    let target = e.target;
    if (target.tagName.toLowerCase() === "path") {
        console.log(target.id);
    }
}

// Sample call:
fetchAndAssignSvg("https://chambresdhotes.org/2018/franceHigh.svg", document.querySelector("#map-container"));

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Dave B