Ошибка, которую вы делаете, предполагает: я не уверен, какой ресурс (ы) вы используете для справки, - это то, что для любого объекта, возвращаемого document.getElementByid("firstGradient")
, определено свойство stopColor
. Нет.
Элемент, который вы называете "firstGradient", является SVGStopElement
, и, как вы можете видеть из спецификации, он не предоставляет никакого свойства stopColor
.
Но нет причин для беспокойства - изменяя фактический атрибут элемента, вы меняете стоп-цвет, именно так работает объектная модель документа - вам вообще не нужно использовать какие-либо специальные свойства элемента дляизменить фактический атрибут:
document.getElementById("firstGradient").setAttribute("stop-color", "red");
Вот и все. setAttribute
Функция доступна для любого элемента документа, SVG, HTML или любого другого пространства имен / вида.
Кстати, я бы не стал называть стоп-цвета градиентами - вызывая вызываемый вами элемент«firstGradient» просто вводит в заблуждение - это стоп-цвет , а не градиент , градиент является фактическим linearGradient
элементом. Поэтому, если вы хотите назначить идентификаторы, присвойте «GradientFirstStopColor» и «GradientSecondStopColor» первому и второму stop
элементам, соответственно, если что угодно.
Но вы также можете просто определить элементы стоп-цвета, используя ихПорядок в дочерней иерархии:
document.querySelector("linearGradient > stop:nth-of-type(1)").setAttribute("stop-color", "red");
Вы можете использовать другие селекторы CSS или API (например, querySelectorAll("linearGradient > stop")[1]
), я хочу сказать, что вам не нужно абсолютно прибегать к назначению идентификаторов, хотя это помогает в некоторых случаях. ситуации - у них абсолютно законное использование.
Конечно, использование свойства style
в элементе stop также работает, но я лично считаю, что семантика наличия style
для неотрисованных объектов (градиенты не используются). Стихияй сам) Стихия - помешательство - подтекающая абстракция, в основном.