这是一篇不正经实现方案报道。
1 引言
先来看个问答:
stackoverflow: Why was the xmp HTML tag deprecated? [duplicate]
这个问题感觉问得好啊:为什么<xmp>
标签被遗弃了啊?
<xmp>
标签是什么?
它是能真正显示html源码的一个包含标签。
比如下面源码,放在html页面中浏览器打开,是能直接看见<h3>aaaa</h3><div>abc</div>
这些带尖括号的源码的。但如果没有包含<xmp>
,我们知道,它们会被解析渲染成aaa abc
,当然,带了浏览器默认样式。
<xmp>
<h3>aaaa</h3>
<div>abc</div>
</xmp>
但在HTML5遗弃了这个标签,取而代之的是<pre></pre>
<code></code>
,但这两个玩意儿本质只是保留空白符(code标签还有默认字体样式),实际要配合尖括号的转码使用。也就是说,<
>
要分别使用 <
>
代替。
<pre>
<h3> aaaa</h3>
<div>abc</div>
</pre>
老实讲,要手动转码这个过程就不是很实用了啊。 无奈,英文渣,也不知道全面那个问答里面有没有人给出了什么好的建议啊
2 想办法啊
其实也没啥好办法了啊。只能乖乖做转码呗。 能手动写在html里面还好说,但作为web服务的前端,很多人的数据都是后端给吧。 作为夹心又弱势的前端,再往前就是被UI蹂躏,往后就是被后端抛弃啊。后端给数据的时候不给转码咋整嘛。
好吧,只能自己用正则转码下了。 代码如下:
代码语言:javascript复制var data = '<h3>aaaa</h3><div>abc</div>';
var rel = data.replace(/[<>]/ig, function(m,p,o){
if(m === '<') return '<';
if(m === '>') return '>';
});
转是转了,就是如果data里面数据量大的话,这性能也是。。。。。
3 还有没有其他办法啊!
其实如果有append
操作,可以试一下以下两种方式啊:
- jQuery可以考虑
ele.text(data)
这种文本赋值; - 原生JavaScript可以考虑
createTextNode(data)
创建文本节点。
嗯!因为都指定了文本,data不知道咋地,就乖乖的真的是文本了,不会幺蛾子的被解析渲染了。