恐怕不是那麼容易:
- 的jsfiddle不是測試SVG的地方,它發送錯誤的內容類型
- 引用外部JS-文件無法創建的HTML (永遠記住,svg不需要用html做任何事情)
- jquery在使用append()時使用一些虛擬div創建元素,但svg不知道div元素
- 還要注意:使用jQuery綁定到svg文檔的加載事件似乎不起作用
下面的示例代碼,當作爲交付對我的作品在FF圖像/ SVG + XML
<svg id="drawing"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
onload="fx()">
<script type="text/ecmascript" xlink:href="http://code.jquery.com/jquery-latest.js" />
<script type="text/ecmascript">
function fx()
{
$(document.createElementNS('http://www.w3.org/2000/svg', 'rect'))
.css('fill','blue')
.attr({'width':100,'height':100})
.appendTo('#drawing');
}
</script>
</svg>
但是就像馬辛我會建議使用插件。
從父文檔添加則可以使用含有該元素的屬性的對象,基本的例子:
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
/*<![CDATA[*/
function fx(obj,params)
{
var svgDoc=obj.contentDocument;
if(typeof params.name!='string')return;
var props=$.extend({'attrs':{},'style':{},'selector':null},params);
props.target=(!props.selector)?svgDoc.documentElement:$(svgDoc).find(props.selector)
$(svgDoc.createElementNS('http://www.w3.org/2000/svg', props.name))
.css(props.style)
.attr(props.attrs)
.appendTo(props.target);
}
/*]]>*/
</script>
</head>
<body>
<object onload="fx(this,{'name':'rect','attrs':{'width':100,'height':100},'style':{'fill':'blue'},'selector':'#drawing'})"
data="my.svg"
type="image/svg+xml"
width="200"
height="200">
<param name="src" value="my.svg">
</object>
</body>
</html>
的對象的結構:
- name:tagName(string)
- 個ATTRS:屬性(對象)
- 樣式:樣式(對象)
- 選擇:選擇器(字符串,如果省略了根元素將被選擇)
你試過在rect上顯式命名空間嗎?或者,您可以通過編程創建節點並插入它嗎? – Marcin 2011-05-20 17:05:53
你的意思是像http://jsfiddle.net/Jkjaa/3/?不,也行不通。 好吧 - 我從GET請求中獲取SVG片段作爲文本。我想避免手動解析它。 – Matthias 2011-05-20 17:15:33
那個jsFiddle對我沒有幫助。另外,我不明白它是如何實現這兩個建議的。 – Marcin 2011-05-20 17:18:57