Javascript 如何访问svg内部id并让CSS更改该id的填充颜色?

Javascript 如何访问svg内部id并让CSS更改该id的填充颜色?,javascript,jquery,html,css,svg,Javascript,Jquery,Html,Css,Svg,这是我的svg文件 next.svg <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/css" href="style.css"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg version="1.1"

这是我的svg文件

next.svg

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="style.css"?>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
 <g class="next">
  <g>
   <polygon fill="#FFD92D" class="inner" points="20.587,5.055 78.706,48 20.587,90.945"/>
   <path fill="#FF9900" class="outer" d="M21.623,7.11L76.961,48L21.623,88.89V7.11 M19.55,3v90l60.9-45L19.55,3L19.55,3z"/>
  </g>
 </g>
</svg>
这是我更改svg文件中.inner颜色的基本jQuery。我做错了什么

objsvg选择器似乎根本没有内部类,因为$objsvg.hasClassinner;返回false

function changeSVGColor() {
    $("#objsvg").removeClass("inner");
    $("#objsvg").addClass("inner-new-color");
}

ID在父对象或“对象”上不起作用,您需要使用升华文本之类的内容打开SVG,并为您试图操作的任何路径添加ID=objsvg

e、 g

看到更新的js小提琴,弹出打开你的控制台了

该ID在父对象或“对象”上不起作用,您需要使用升华文本之类的内容打开SVG,并为您试图操作的任何路径添加ID=objsvg

e、 g

看到更新的js小提琴,弹出打开你的控制台了

按类别选择要更改的部分。$。内在的


按类别选择要更改的部分。$。内在的


我将id=objsvg添加到svg文件中,但是$objsvg.hasClassouter;运行时返回false。有没有一种方法可以使用jQuery以某种方式访问svg元素?这个$objsvg我相信它可以让我访问对象,但我对使用jQuery获取对象内部的svg感兴趣。如果您得到的是错误的,请确保您将该ID添加到HTML或svg标记中,我已经更新了JSFIDLE,这应该会使这一点更清楚,如果您还有更多问题,请告诉我,谢谢你的评论和提琴。我尝试使用标签访问svg,并将svg文件放在外部文件中,而不是内联文件。当svg文件位于外部文件中时,是否有方法访问.inner和.outer类?我在svg文件中添加了id=objsvg,但$objsvg.hasClassouter;运行时返回false。有没有一种方法可以使用jQuery以某种方式访问svg元素?这个$objsvg我相信它可以让我访问对象,但我对使用jQuery获取对象内部的svg感兴趣。如果您得到的是错误的,请确保您将该ID添加到HTML或svg标记中,我已经更新了JSFIDLE,这应该会使这一点更清楚,如果您还有更多问题,请告诉我,谢谢你的评论和提琴。我尝试使用标签访问svg,并将svg文件放在外部文件中,而不是内联文件。当svg文件位于外部文件中时,是否有方法访问.inner和.outer类?请检查my on embedded并重用该编码。然后更新SVG部分并调整编码。检查嵌入的my并重用该编码。然后更新SVG部分并调整编码。您好,谢谢您的帮助。有没有办法使用带有外部svg文件的标记而不是标记来实现这一点?当svg处于内联状态时,我能够访问.internal类,但是当svg位于单独的文件中时,我很难访问它。对于如何从外部svg文件中访问它,我并不完全肯定。您可能希望从另一个线程签出。他给出了一些选项和示例链接。希望那里有什么可以帮助你。谢谢你的帮助。我将接受这个答案,因为它让我最接近解决这个问题。嗨,谢谢你的拨弄。有没有办法使用带有外部svg文件的标记而不是标记来实现这一点?当svg处于内联状态时,我能够访问.internal类,但是当svg位于单独的文件中时,我很难访问它。对于如何从外部svg文件中访问它,我并不完全肯定。您可能希望从另一个线程签出。他给出了一些选项和示例链接。希望那里有什么可以帮助你。谢谢你的帮助。我将接受这个答案,因为它让我最接近解决这个问题。
.inner {
  fill: #000000;
}
.inner-new-color {
    fill: #ff00ff;
}
function changeSVGColor() {
    $("#objsvg").removeClass("inner");
    $("#objsvg").addClass("inner-new-color");
}
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
 <g class="next">
  <g>
   <polygon fill="#FFD92D" class="inner" points="20.587,5.055 78.706,48 20.587,90.945"/>
   <path id="objsvg" fill="#FF9900" class="outer" d="M21.623,7.11L76.961,48L21.623,88.89V7.11 M19.55,3v90l60.9-45L19.55,3L19.55,3z"/>
  </g>
 </g>
</svg>
$(".inner").removeClass("inner").addClass("inner-new-color");