使用 JS 更改 css 填充 svg
Changing css fill for svg with JS
我正在尝试使用 JS 更改由 css 定义的 svg 填充颜色。由于某种原因,它不起作用。这是我的代码:
SVG 本身(简而言之):
<svg id="secondalert"><style>.cls-1{fill:#000000;}</style></svg>
和 JS 来定位和改变它:
function() {
var svg_css = document.getElementsByClassName('.cls-1');
if (random_value < 20) {
svg_css.css({
"fill": "#EF4136"
});
} else {
svg_css.css({
"fill": "#EF4136"
});
}
}
有些东西没有组合在一起,填充颜色保持黑色,因为它在样式标签中。
我做错了什么?
您可以使用 svg_css.style.fill = "#hexadecimal"
而不是 svg_css.css({"fill" : "#hexadecimal"})
而且,当您使用 getElementsByClassName
时,它 returns 一个数组,而不是使用 getElementById
或选择数组中的元素:
svg_css = document.getElementsByClassName('.cls-1')[0];
在开始更改样式之前,需要注意以下几点:
var svg_css = document.getElementsByClassName('.cls-1');
通过 class 名称获取元素没问题,但 .
selector 特定于 CSS。这意味着 svg_css
将被设置为 .cls-1
的 class 不是 cls-1
.
的任何元素
其次,您的HTML中没有cls-1
的class元素。具有这种 class 的元素看起来像:
<svg id="secondalert" class="cls-1"></svg>
我猜 random_value
是在别处声明的,但您可能希望在该函数中有一个随机值。
你需要做的是通过 class 名称获取元素,然后 returns 一个元素列表,select 你想要哪个(在我们的例子中是第一个一个。)然后,要设置填充,请使用 style
属性 其中有一个 fill
属性.
var elements = document.getElementsByClassName('cls-1');
elements[0].style.fill = Math.random()*40 > 20 ? "blue" : "red";
<svg class="cls-1" width="100" height="100" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1417 1632h-1118v-480h-160v640h1438v-640h-160v480zm-942-524l33-157 783 165-33 156zm103-374l67-146 725 339-67 145zm201-356l102-123 614 513-102 123zm397-378l477 641-128 96-477-641zm-718 1471v-159h800v159h-800z"/></svg>
我正在尝试使用 JS 更改由 css 定义的 svg 填充颜色。由于某种原因,它不起作用。这是我的代码:
SVG 本身(简而言之):
<svg id="secondalert"><style>.cls-1{fill:#000000;}</style></svg>
和 JS 来定位和改变它:
function() {
var svg_css = document.getElementsByClassName('.cls-1');
if (random_value < 20) {
svg_css.css({
"fill": "#EF4136"
});
} else {
svg_css.css({
"fill": "#EF4136"
});
}
}
有些东西没有组合在一起,填充颜色保持黑色,因为它在样式标签中。 我做错了什么?
您可以使用 svg_css.style.fill = "#hexadecimal"
svg_css.css({"fill" : "#hexadecimal"})
而且,当您使用 getElementsByClassName
时,它 returns 一个数组,而不是使用 getElementById
或选择数组中的元素:
svg_css = document.getElementsByClassName('.cls-1')[0];
在开始更改样式之前,需要注意以下几点:
var svg_css = document.getElementsByClassName('.cls-1');
通过 class 名称获取元素没问题,但 .
selector 特定于 CSS。这意味着 svg_css
将被设置为 .cls-1
的 class 不是 cls-1
.
其次,您的HTML中没有cls-1
的class元素。具有这种 class 的元素看起来像:
<svg id="secondalert" class="cls-1"></svg>
我猜 random_value
是在别处声明的,但您可能希望在该函数中有一个随机值。
你需要做的是通过 class 名称获取元素,然后 returns 一个元素列表,select 你想要哪个(在我们的例子中是第一个一个。)然后,要设置填充,请使用 style
属性 其中有一个 fill
属性.
var elements = document.getElementsByClassName('cls-1');
elements[0].style.fill = Math.random()*40 > 20 ? "blue" : "red";
<svg class="cls-1" width="100" height="100" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1417 1632h-1118v-480h-160v640h1438v-640h-160v480zm-942-524l33-157 783 165-33 156zm103-374l67-146 725 339-67 145zm201-356l102-123 614 513-102 123zm397-378l477 641-128 96-477-641zm-718 1471v-159h800v159h-800z"/></svg>