jQuery: выберите один конкретный элемент из выбранной группы SVG

#javascript #jquery #svg

Вопрос:

Итак, у меня есть простая группа SVG:

 lt;g id="interceptor"gt;  lt;ellipse cx="0" cy="15" rx="6" ry="14" fill="url(#gradient)"/gt;  lt;polygon points="0,-20 7,10 0,0 -7,10" fill="blue"/gt;  lt;polygon points="0,-20 7,10 0,0" fill="darkblue"/gt; lt;/ggt;  

Который я затем использую вот так:

 lt;g class="ship" id="ship3" transform="rotate(-180,480,24) translate(480,24)"gt;  lt;use xlink:href="#interceptor"/gt; lt;/ggt;  

Теперь я хотел бы добавить обводку вокруг первого многоугольника из группы при нажатии на всю группу, но я не знаю, как получить доступ к содержимому группы перехватчиков с помощью jQuery. Я думал о чем-то подобном, но contents() ничего не возвращает:

 $(".ship").click(function() {  $(this).find("use").contents().find("polygon").first().attr({"stroke-width":1, stroke:"white"}); });  

Я, конечно, могу добавить обводку вокруг всего «.ship», и это работает, но это не то, что я хочу, потому что это создает обводки между полигонами в группе. Кроме того, может быть несколько отдельных объектов, которые используют группу #перехватчик, и только тот, который фактически нажат, должен получить обводку. Это выполнимо?

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

1. Вам было бы намного проще, если бы вы перестали использовать элементы lt;usegt; и просто использовали нужные вам элементы напрямую.

2. Да, но, как я уже сказал, мне, возможно, придется много раз повторно использовать группу #перехватчик. Я бы предпочел не определять это каждый раз заново.

3. таким образом, каждый раз, когда вы меняете штрих, вам нужно обновлять все экземпляры элемента lt;usegt;? В любом случае, если у вас lt;usegt; нет содержимого (), вам придется перейти по ссылке xlink:href, чтобы найти элемент, на который он указывает.

4. Было бы проще просто иметь две версии перехватчика, одну с штрихом, а другую без, а затем переключать их по щелчку, например: $(this).find('use').attr('xlink:href', '#interceptorWithStroke');