2011-04-11 101 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>标签。