2012-02-03 71 views
4

我寫了一個動態編輯svg元素的javascript。我想獲得編輯後的svg元素的新字符串,但目前我的代碼失敗。 我在這裏找到下面的代碼來獲取HTML文檔的字符串形式。如何獲取HTML文檔的動態修改的SVG元素的字符串?

var txt = document.documentElement.innerHTML; 

我只是想要SVG元素的innerHTML。我試了下面的代碼,但得到一個錯誤消息,說「未定義」。

var svgnode=document.getElementById("svgnode1"); 
alert(svgnode.innerHTML); 

我該怎麼做。該錯誤發生在Google Chrome上,但我想要一個適用於任何瀏覽器的解決方案。

+0

你可以發佈更多的代碼? svg-element的id是否爲「svgnode1」? – Nessuno 2012-02-03 15:25:33

+0

當你說「我在這裏找到...」時,你是否想要鏈接到某個東西? – 2012-02-03 15:30:02

+0

對不起。我在stackoverflow中找到了代碼。 – 2012-02-03 15:31:59

回答

10

innerHTML是爲HTML文檔定義的,但不適用於其他類型的XML DOM。

對於像SVG的設備那樣,計劃爲innerHTML計劃一些機制。 http://www.w3.org/Graphics/SVG/WG/wiki/SVG_2_DOM#innerHTML_type_facilities

的innerHTML型設施

如果XML有一個innerHTML般的功能。它會是不錯的。在ECMAScript字符串中寫入標記可能有點痛苦,但它也可以簡化很多事情,並且更好地說明,對於那些有用的場景類型,這可能意味着類似於E4X的功能。

調用此設施innerHTML將使它看起來像標記應該被解析爲XHTML命名空間之中,那麼也許innerMarkupinsertCode會是一個更好的名字,或者,對於對稱textContent,也許markupContent

如果你需要的是把SVG,或任何其他XML DOM爲XML字符串的方式,請參閱https://developer.mozilla.org/en/Parsing_and_serializing_XML

或參見https://stackoverflow.com/a/4916895/20394 IE等效。

+0

非常感謝。 – 2012-02-03 15:40:52

1

一些實際的代碼(在谷歌,Chrome和IE 11測試):

<object id="sv" data="Switzerland_regions.svg" type="image/svg+xml"> 
    <!-- <img src="yourfallback.jpg" />--> 
</object> 


<script type="text/javascript"> 
     var S = document.getElementById("svgnode1") 

     var markup = (new XMLSerializer()).serializeToString(S.contentDocument.rootElement); 
     console.log(markup); 


     // var SD = S.getSVGDocument(); 

     // var circle1 = SD.getElementById("GR"); 
     // console.log(circle1); 
     // circle1.style.fill = "grey"; 

     //var rectangle = SD.querySelector("#layer4"); 
     //var parent = rectangle.parentNode; 
     //parent.removeChild(rectangle); 
</script> 
相關問題