2013-12-11 93 views
1

這些問題的大多數答案都表明使用innerHTMLouterHTML。但我沒有得到我想要的。例如:將DOM元素轉換爲原始HTML字符串

var el = document.createElement("DIV"); 
el.innerHTML = "<span><% blabla %></span>"; 
// let's say that el is actually initialized with document.getElementById 
// and el = <div><span><% blabla %></span></div> 
console.log(el.outerHTML); 

上述代碼的結果是

"<div><span>&lt;% blabla %&gt;</span></div>" 

那麼,問題出在<>,事實上,我沒有收到他們。好的,我知道瀏覽器的行爲有點不正常,我可以用.replace(/&lt;/g, '<').replace(/&gt;/g, '>')來解決這個問題。但是,簽出以下幾點:

el.innerHTML = "<span><% for(var i=0; i<list.length; i++) { %> bla bla <% } %>"; 
console.log(el.outerHTML); 

結果不能修復:

<div><span>&lt;% for(var i=0; i<list.length; i++)="" {="" %=""> bla bla &lt;% } %&gt;</list.length;></span></div> 

任何想法來解決這個問題。

編輯:

我發現問題是在該<標誌for循環。所以如果我用for(var i in list)替換它,那麼outerHTML將返回正確的值。

+0

沒有。這是一個使用這些信息的客戶端庫。類似像Angular。更具體的這一個http://krasimir.github.io/absurd/ – Krasimir

+0

也許這個變種是用別的東西代替'<' and '>'。 – Krasimir

+0

難道你不能等到圖書館完成信息處理,然後閱讀*生成的* DOM? – CodingIntrigue

回答

-1

這是一個骯髒的伎倆,如果你需要對這些字符串做一些「時髦」的事情,可能無法幫到你,但是如果你不介意讓瀏覽器爲你做一部分工作,你可以在一個div中「顯示」它,然後在js中再次獲取它,並且你得到了完全的html字符串。

例如:

var string = "&lt; blabla &gt;"; 
$('converterDiv').html(string); // jQuery because I'm lazy 
var convertedString = $('converterDiv').html(); 

...又是一個 「壞」 的伎倆,但可以幫助你。

+0

它看起來像瀏覽器試圖使用標記並將其轉換爲不同的東西。之後的每個操作都將返回轉換後的值。如果我控制html,你的解決方案將工作,但我不能強迫每個開發者輸入'<'而不是'<'。無論如何,謝謝你的建議。 – Krasimir

+0

我告訴過你這是個詭計:)。爲了實現你想要的,你可以看看jQuery的text()函數...它以相反的方式進行轉換,但也許會給你一個想法如何扭轉它。 – zozo

+0

謝謝。我一定會檢查jQuery的方法。 – Krasimir

相關問題