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