尝试使用jquery修改svg样式

尝试使用jquery修改svg样式,jquery,svg,Jquery,Svg,在尝试使用以下内容修改样式属性时,我加载了一个svg文件: $("object").contents().find('#path5431').css('fill', 'red'); 我什么也得不到。代码在加载svg后运行。有什么建议吗 谢谢 编辑: 如果SVG内嵌(嵌入)到html中,那么通过CSS/Javascript对其进行编辑相对简单 但是,当从外部文件加载时,SVG结构的操作非常困难 您可能希望研究使用AJAX加载之类的方法将SVG嵌入html,然后操纵 这种方法存在几个问题(请参阅

在尝试使用以下内容修改样式属性时,我加载了一个svg文件:

$("object").contents().find('#path5431').css('fill', 'red');
我什么也得不到。代码在加载svg后运行。有什么建议吗

谢谢

编辑:


如果SVG内嵌(嵌入)到html中,那么通过CSS/Javascript对其进行编辑相对简单

但是,当从外部文件加载时,SVG结构的操作非常困难

您可能希望研究使用AJAX加载之类的方法将SVG嵌入html,然后操纵

这种方法存在几个问题(请参阅)

但是,我已经成功地使用SVGInjector(请参阅)执行了以下操作:

<img id="image-one" class="inject-me" data-src="image-one.svg">
<img id="image-two" class="inject-me" data-src="image-two.svg">
// Elements to inject
var mySVGsToInject = document.querySelectorAll('img.inject-me');

// Options
var injectorOptions = {
  evalScripts: 'once',
  pngFallback: 'assets/png',
  each: function (svg) {
    // Callback after each SVG is injected
    console.log('SVG injected: ' + svg.getAttribute('id'));
  }
};

// Trigger the injection
SVGInjector(mySVGsToInject, injectorOptions, function (totalSVGsInjected) {
  // Callback after all SVGs are injected
  console.log('We injected ' + totalSVGsInjected + ' SVG(s)!');
});

//要注入的元素
var mySVGsToInject=document.queryselectoral('img.injectme');
//选择权
变量注入选项={
evalscript:'一次',
pngFallback:“资产/png”,
每个:函数(svg){
//在每个SVG被注入后回调
log('SVG注入:'+SVG.getAttribute('id'));
}
};
//触发注射
SVGInjector(mySvgStoInjection、injectorOptions、function(totalSVGsInjected){
//注入所有SVG后的回调
log('weinjected'+totalSVGsInjected+'SVG(s)!');
});
我最近也看到了这些文章


我认为我们需要看到一些HTML,但如果是内联svg
contents()
就不需要了。否则(嵌入式)您将很难访问它。嗨,Shik。添加了如何嵌入svg文件。请查看此jQuery插件-。根据我的理解,jQuery不能很好地与svg交互。是的,我发现在svg上使用任何JavaScript都很麻烦。当它是内联的,用一些jQuery和vanilla JS来填补空白时,几乎任何操作都是可能的。如果它是一个大文件,您可以尝试将其作为
.txt
放到服务器上,并使用
.load()
动态添加它—如果它会挤满页面源。不过我自己还没有尝试过。我只想补充一点,svg注入器库现在包含在icologic.js中,因此您可以使用IconicJS().inject(mySVGsToInject,injectorOptions)来实现相同的结果。
<img id="image-one" class="inject-me" data-src="image-one.svg">
<img id="image-two" class="inject-me" data-src="image-two.svg">
// Elements to inject
var mySVGsToInject = document.querySelectorAll('img.inject-me');

// Options
var injectorOptions = {
  evalScripts: 'once',
  pngFallback: 'assets/png',
  each: function (svg) {
    // Callback after each SVG is injected
    console.log('SVG injected: ' + svg.getAttribute('id'));
  }
};

// Trigger the injection
SVGInjector(mySVGsToInject, injectorOptions, function (totalSVGsInjected) {
  // Callback after all SVGs are injected
  console.log('We injected ' + totalSVGsInjected + ' SVG(s)!');
});