2010-08-17 35 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

相关问题