Получить идентификатор выбранного пути svg с помощью javascript

#javascript #xml #svg

#javascript #xml #svg

Вопрос:

У меня есть SVG-карта округов в Массачусетсе. Файл svg содержит пути, описывающие каждый округ, и каждый путь имеет название округа в качестве своего id . Мне нужно захватить id округ при нажатии на него, чтобы его можно было установить в переменную.

Редактировать: SVG — это внешний файл (это карта с множеством координат пути; кажется, было бы беспорядочно копировать / вставлять все это непосредственно в HTML, поэтому оно загружается из внешнего файла). Вот пример файла svg:

 <?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/css" href="co25_d00.css"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN"
    "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">

<svg id="MACounties"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   version="1.0" width="100%" height="100%" preserveAspectRatio="xMidYMax" viewBox="12.711167 456.567074 29.566845 18.433033">
<title>Libre Map Project</title>
<g transform="scale(1.0,-1.0) translate(0,-931.567181)">
<g id="Unknown_Area_Type_co25_d00_e00" style="fill:'currentColor';pointer-events:visible;stroke:rgb(1,0,0);stroke-width:0.01;stroke-linecap:round">
    <path id="Essex" d="M34.363079 474.99995L34.363179 474.99967 34.363179 474.99967 34.462128 474.99704 34.596972 474.95046...>
  

Редактировать 2: это HTML-файл, в который загружается изображение.

 <html>
<head>
    <title>Untitled</title>
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="co25_d00.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script type="text/javascript">
        $(function(){

              var container = $("#map");
              var svgUrl    = "co25_d00.svg";
              var xmlDoc;

              $.get(svgUrl)
                .then(injectSvg);

              function injectSvg(xmlDoc) {
                var svg = $(xmlDoc).find("svg");
                container.append(svg);
              };

              $(document).ready(function() {
                $('path').onclick = function() {
                    alert($(this).attr('id'));
                };
              });
            });
    </script>
</head>
<body>
    <div id="map"></div>
</body>
</html>
  

Комментарии:

1. Можете ли вы поделиться с нами кодом SVG? Он встроен или на него ссылаются?

2. @Matt Я не думаю, что у вас могут быть прослушиватели событий для изображений с внешними ссылками, я полагаю, вы используете для этого тег img?

3. Извините, я добавил фрагмент кода svg, с которым я работаю.

4. @matt и мы вернулись к тому, в чем проблема? Не вызывается ли onclick? Если он вызывается, отображается ли предупреждение о чем-то, чего вы не ожидаете?

5. Вероятно, проблема в том, что вы click слишком рано установили обработчик в своей $(document).ready функции. Попробуйте установить click обработчик после того, как SVG был загружен и вставлен в DOM (т. Е. В injectSvg ).

Ответ №1:

Ваша привязка события должна быть внутри вашего обратного вызова. Нравится

   $.get(svgUrl)
      .done(function( svgdata ) {
          injectSvg(svgdata);
          $('path').on('click', function() {
              alert($(this).attr('id'));
          });
  });
  

Комментарии:

1. Я пробовал это, и теперь карта вообще не загружается.

2. извините… попробуйте

3. Это билет. Спасибо!!