2013-04-09 65 views
1

我有一個HTML文件,該文件類似於這樣的字符串替換HTML節點。與使用JavaScript

<html> 
    <body> 
      <h1>My Embeded SVG</h1> 
      <p>This is my html page with some embedded SVG</p> 
      <svg id="mySVG"></svg> 
      <textarea id="userbox"></textarea> 
      <input type="button" value="Replace" OnClick="replaceText()"/> 
    </body> 
</html> 

我需要能夠用textarea中用戶生成的字符串替換節點。我寫了一個JavaScript函數來完成這項工作....但是這取代了整個HTML文檔。

function replaceText(){ 
    var allText = document.getElementById("userbox").value; 
    var newDoc = document.open("text/svg", "replace"); 
    newDoc.write(allText); 
    newDoc.close(); 
} 

有什麼方法可以替換SVG節點。

來自用戶的文本將類似於此。

<svg id="mySVG" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path id="javascript" d="M 448 0 L 1045 0 L 896 40 L 846 159 L 746 378 z" fill="rgba(092,000,214,0.36)" stroke="black"></path></svg> 
+2

的HTML標籤應該是BODY標籤之外。 – 2013-04-09 10:52:32

+0

對不起......一個錯字問這個問題 – CJH 2013-04-09 10:56:03

+0

不應該allText'的'值從「USERBOX」上牽拉,而不是「savebox」的時候? – LuigiEdlCarno 2013-04-09 10:58:28

回答

1

你可以做這樣的事情:

<h1>My Embeded SVG</h1> 
<p>This is my html page with some embedded SVG</p> 
<div id="svgContainer"> 
    <svg id="mySVG"></svg> 
</div> 
<textarea id="userbox"></textarea> 
<input type="button" value="Replace" OnClick="replaceText()"/> 

JavaScript是這樣的:

// replace below line with the real variable coming from the user input. 
var strFromUser = '<svg id="mySVG" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path id="javascript" d="M 448 0 L 1045 0 L 896 40 L 846 159 L 746 378 z" fill="rgba(092,000,214,0.36)" stroke="black"></path></svg>' 

var container = document.getElementById("svgContainer"); 

container.innerHTML = strFromUser; 
+0

與我所說的有何不同? – 2013-04-09 11:04:24

+0

你爲什麼這樣評論?這是一個社區網站。 – wmfairuz 2013-04-09 11:05:32

+0

像什麼?我只是好奇你還有什麼改變。 – 2013-04-09 11:07:01

0

你不應該使用write()writeln()頁面已經呈現後。這將確實清除整個頁面。

你需要做的是放置在<DIV>或其他一些標籤SVG。然後getElementById()DIV,並改變其innerHTML與用戶輸入的值。

ps。當心你有textarea id爲userbox,但在JS使用saveBox