DrgIonuţ Ответов: 1

Как выбрать элементы SVG group внутри тега <object>


У меня есть внешний файл SVG, который вызывается в теге <object>.
<object data="Img/PumpStation/Interfata.svg" type="image/svg+xml" id="p1"></object>

SVG содержит две группы.
<svg>
  <g id="g1">
     <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="6.8694" y1="93.75" x2="30.2922" y2="93.75" gradientTransform="matrix(1 0 0 -1 0 112.5)">
     <stop offset="0.01" style="stop-color:#4F4D4D" />
     <stop offset="0.51" style="stop-color:#F5F5F5" />
     <stop offset="1" style="stop-color:#4D4D4D" />
   </linearGradient>
   <path fill="url(#SVGID_2_)" stroke="#4C4C4C" stroke-width="0.25" d="M6.869,3.266V37.5h23.423v-0.45V3.266l-1.577-2.703L27.59,0   h-0.676h-1.239H10.248L7.545,1.577L6.982,2.703L6.869,3.266" />

   <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="6.8694" y1="78.1523" x2="30.2922" y2="78.1523" gradientTransform="matrix(1 0 0 -1 0 112.5)">
     <stop offset="0.01" style="stop-color:#4D4D4D" />
     <stop offset="0.51" style="stop-color:#F5F5F5" />
     <stop offset="1" style="stop-color:#4D4D4D" />
   </linearGradient>
   <path fill="url(#SVGID_3_)" stroke="#4C4C4C" stroke-width="0.25" d="M6.869,34.347h23.423" />

   <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="6.8694" y1="105.8555" x2="30.2922" y2="105.8555" gradientTransform="matrix(1 0 0 -1 0 112.5)">
     <stop offset="0.01" style="stop-color:#4D4D4D" />
     <stop offset="0.51" style="stop-color:#F5F5F5" />
     <stop offset="1" style="stop-color:#4D4D4D" />
   </linearGradient>
   <path fill="url(#SVGID_4_)" stroke="#4C4C4C" stroke-width="0.25" d="M6.869,6.645h23.423" />
  </g>
  <g id="g2">
    <linearGradient id="linearColors" x1="0" y1="0" x2="1" y2="1">
      <stop offset="5%" stop-color="#01E400"></stop>
      <stop offset="25%" stop-color="#FEFF01"></stop>
      <stop offset="40%" stop-color="#FF7E00"></stop>
      <stop offset="60%" stop-color="#FB0300"></stop>
      <stop offset="80%" stop-color="#9B004A"></stop>
      <stop offset="100%" stop-color="#7D0022"></stop>
   </linearGradient>
  <circle r="120" cx="150" cy="150" class="external-circle" stroke-width="4" fill="none" stroke="url(#linearColors)"></circle>
  </g>
</svg>

Моя пуговица:
<asp:Button ID="StartP1" class="startP btn btn-light" runat="server" Text="Start P1" Style="width: 100%" />

Я знаю, как заменить все стоп-цвета из стоп-тегов на действие щелчка. Я делаю это с помощью этой функции jQuery.
Мой вопрос заключается в том, как я мог бы реализовать функцию jQuery только для группы с id="g1", а не для обеих групп моего SVG?

Что я уже пробовал:

Моя функция jQuery:
jQuery('.startP').on('click', function () {            
        $("object").contents().find('stop').each(function () {
            var color = jQuery(this).css('stop-color');
            if (color === 'rgb(77, 77, 77)') {
                jQuery(this).css('stop-color', '#00ff00');
            }
        });
    });

1 Ответов

Рейтинг:
1

Richard Deeming

Измените селектор, который вы передаете в find метод так, что он только находит stop элементы, являющиеся потомками элемента с требуемым идентификатором:

$("object").contents().find('#g1 stop').each(function () {


DrgIonuţ

С помощью этого кода цвет вообще не меняется при нажатии кнопки.

Richard Deeming

Это прекрасно работает для меня. Попробуйте отладить свой код или добавить некоторые из них console.debug заявления к вашему сценарию.

var stops = $('object').contents().find('#g1 stop');
console.debug(stops);

stops.each(function(){
    var stop = $(this);
    var color = stop.css('stop-color');
    console.debug(stop, color);
    
    if (color === 'rgb(77, 77, 77)') {
        stop.css('stop-color', '#00ff00');
    }
});

DrgIonuţ

В моей консоли не отображается никаких ошибок.

Richard Deeming

Так что отладьте свой код или добавьте console.debug операторы и посмотрите на отладочный вывод в консоли.

DrgIonuţ

Я использовал именно тот код, который вы указали выше. Когда я нажимаю кнопку, в консоли не отображается сообщение об ошибке.

Richard Deeming

ТАК ЧТО ОТЛАДЬТЕ СВОЙ КОД!

Я не могу отладить его для вас.

Если вы не получаете никаких отладочных выходных данных в консоли, то ваш обработчик нажатия кнопки не срабатывает.