2011-04-11 87 views
8

我希望HTML(例如<p>)以純文本形式顯示show,並且不會被瀏覽器解釋爲實際標記。如何將HTML插入爲文本

我知道JQuery有.html和.text,但這是如何在原始JS中完成的?

有一些像encodeURIComponent這樣的函數可以編碼<p>%3Cp%3E但是如果我只是把它放到HTML中,它會直接解釋爲%3Cp%3E

所以也有像&gt;&lt;這樣的東西,但它們工作正常,但是我找不到任何可以從中逃脫的JavaScript函數。

有沒有正確的方法來顯示爲原始JavaScript的HTML文本?

+0

我個人使用不贊成使用的工作標籤[XMP](https://developer.mozilla.org/en/HTML/Element/xmp),如下所示:'document.getElementById('someDiv')。innerHTML ='

這裏是一些 HTML

'' – mplungjan 2011-04-11 06:04:53

回答

16

有沒有必要逃避人物。只需使用createTextNode

var text = document.createTextNode('<p>Stuff</p>'); 
document.body.appendChild(text); 

看到這裏工作的例子:http://jsfiddle.net/tZ3Xj/

這正是jQuery的是怎麼做的(line 43 of jQuery 1.5.2):

return this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(text)); 
+0

你知道爲什麼Prototype會按照他們的方式來做,如果這個(更好看)的技術有效嗎? – thirtydot 2011-04-11 06:01:10

+0

@thirtydot,Prototype在將文本插入到DOM中時使用轉義還是僅僅是一個效用函數?我可以想象逃脫在其他地方有其用途。 – 2011-04-11 06:12:41

+0

也許createTextNode會逃避自己?無論如何,這是我需要的功能。謝謝。 – foobar 2011-04-12 18:49:00

5

通過原型使用的功能看起來像一個良好的開端:

http://www.prototypejs.org/api/string/escapeHTML

function escapeHTML() { 
    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); 
} 

版本更適合使用外部原型:

function escapeHTML(html) { 
    return html.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'); 
} 
1

這是該方法的工作createTextNode

var target div = document.getElementById('div1'); 
targetDiv.appendChild(document.createTextNode('<p>HelloWorld</p>')); 
1

我建議使用HTML

的前標籤和使用this link

例如,如果你複製

<p>Hi </p> 
您可以將您的

它會給你轉換代碼...

&lt;p&gt;Hi &lt;/p&gt; 

只需複製並粘貼在上面的代碼之前,它會正常工作......

0

可以ASLO innerText使用大多數DOM元素:

document.getElementById('some').innerText = "There can be <b> even HTML tags </b>"; 

變量將不被格式化。您也可以使用\n作爲新行和更多代碼(\t\u2623 ...)。如果你想要使用固定大小的字符,你可以使用簡單的<pre>標籤。