2015-04-03 69 views
0

我加載了一個SVG文件,並試圖修改此樣式屬性時:試圖修改SVG風格與jQuery

$("object").contents().find('#path5431').css('fill', 'red'); 

我什麼也沒得到。該代碼在加載svg後運行。有小費嗎?

謝謝。

編輯:

<body> 
    <object data='image.svg'></object> 
</body> 
+1

我想我們需要看一些HTML,但如果它是一個內聯svg'內容()'是不需要的。否則(嵌入式)您將很難訪問它。 – Shikkediel 2015-04-03 14:02:19

+0

嗨Shik。添加了我如何嵌入svg文件。 – 2015-04-03 14:15:55

+0

看看這個jQuery插件 - http://keith-wood.name/svg.html。據我瞭解,jQuery無法與天真地與svg良好地交互。 – 2015-04-03 14:20:56

回答

1

如果SVG是內聯(嵌入式)到HTML,通過CSS/JavaScript編輯是比較簡單的。

但是,從外部文件加載時,對SVG結構的操作極其困難。

您可能要考慮使用像AJAX負載的東西嵌入SVG到HTML,然後操縱...

有這種方法的幾個問題(見How do I dynamically insert an SVG image into HTML?)。

不過,我已經成功地使用SVGInjector(見https://github.com/iconic/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)!'); 
}); 

我也碰到了最近這些文章...

+0

我只是補充說,svg注入庫現在包含在iconic.js中,因此您可以使用IconicJS()。inject(mySVGsToInject,injectorOptions)來完成相同的結果。 – Marko 2016-04-05 20:29:07