2010-08-17 44 views
4

我正在與jQuery一起修改一些svg 文件 數據...我需要做的一件事是修改「viewBox」屬性。但是,如果在下面的代碼片段中使用jQuery,則會在屬性上執行toLower(),以便「viewBox」變成「viewbox」。通常我不會在乎,但這似乎打破了svg渲染(至少在查找器和Safari中的Mac OS X上)。有沒有辦法使用jQuery添加區分大小寫的屬性?

有沒有辦法在jQuery中本地修改(通過標誌或其他)或者我將不得不做一個字符串替換之後?

var $svg = $('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"></svg>'); 
// do some work here 
$svg.attr('viewBox', 0 + ' ' + 0 + ' ' + 288 + ' ' + 288); 
+0

這可能不是您要查找的內容,但您是否考慮過使用XSL來轉換文件?這是一個更常見的方法... – 2010-08-17 21:36:22

回答

1

除非你想修改庫本身,否則我沒有看到任何方法可以避免做一個字符串替換。

+0

這基本上是我必須做的,以解決這個問題。 – longda 2010-12-07 01:05:17

1

如果你爲了設置屬性而退出jQuery對象怎麼樣?例如

var $svg = $('<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"></svg>'); 

$svg[0].setAttribute('viewBox', 0 + ' ' + 0 + ' ' + 288 + ' ' + 288); 

注意:您可能也想看看這個jQuery插件:http://keith-wood.name/svg.html

3

您可以使用SVG DOM API來設置視框:

$svg.each(function(index,node){ 
    node.viewBox.baseVal.x = 0 
    node.viewBox.baseVal.y = 0 
    node.viewBox.baseVal.width = 288 
    node.viewBox.baseVal.height = 288 
}) 

更多信息可以發現SVG規範:http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute

+0

我注意到,當從選擇器顯示元素時,jquery沒有正確地報告更新後的svg屬性值,但節點本身會反映這些更改。 – 2013-08-26 19:05:57

相關問題