在textarea中渲染HTML

时间:2011-01-16 14:23:26

标签: javascript jquery html textarea

我需要能够在textarea中呈现一些HTML标签(即< strong>,< i>,< u>,< a>)但textareas只能将其内容解释为文本。有没有一种简单的方法可以不依赖外部库/插件(我使用的是jQuery)? 如果没有,你知道我可以使用任何jQuery插件吗?

7 个答案:

答案 0 :(得分:206)

textarea无法做到这一点。您正在寻找的是content editable div,这很容易做到:

<div contenteditable="true"></div>

jsFiddle

div.editable {
    width: 300px;
    height: 200px;
    border: 1px solid #ccc;
    padding: 5px;
}

strong {
  font-weight: bold;
}
<div contenteditable="true">This is the first line.<br>
See, how the text fits here, also if<br>there is a <strong>linebreak</strong> at the end?
<br>It works nicely.
<br>
<br><span style="color: lightgreen">Great</span>.
</div>

答案 1 :(得分:28)

使用可编辑的div,您可以使用方法document.execCommandmore details)轻松地为您指定的代码和其他一些功能提供支持..

#text {
    width : 500px;
	min-height : 100px;
	border : 2px solid;
}
<div id="text" contenteditable="true"></div>
<button onclick="document.execCommand('bold');">toggle bold</button>
<button onclick="document.execCommand('italic');">toggle italic</button>
<button onclick="document.execCommand('underline');">toggle underline</button>

答案 2 :(得分:4)

因为你只说渲染,是的,你可以。你可以做一些事情:

function render(){
	var inp     = document.getElementById("box");
	var data = `
<svg xmlns="http://www.w3.org/2000/svg" width="${inp.offsetWidth}" height="${inp.offsetHeight}">
<foreignObject width="100%" height="100%">
<div xmlns="http://www.w3.org/1999/xhtml" 
style="font-family:monospace;font-style: normal; font-variant: normal; font-size:13.3px;padding:2px;;">
${inp.value} <i style="color:red">cant touch this</i>
</div>
</foreignObject>
</svg>`;
	var blob = new Blob( [data], {type:'image/svg+xml'} );
	var url=URL.createObjectURL(blob);
	inp.style.backgroundImage="url("+URL.createObjectURL(blob)+")";
 }
 onload=function(){
  render();
  ro = new ResizeObserver(render);
	ro.observe(document.getElementById("box"));
 }
#box{
  color:transparent;
  caret-color: black;
  font-style: normal;/*must be same as in the svg for caret to align*/
  font-variant: normal; 
  font-size:13.3px;
  padding:2px;
  font-family:monospace;
}
<textarea id="box" oninput="render()">you can edit me!</textarea>
这使得textarea将呈现html! 除了调整大小时闪烁,无法直接使用类,并且必须确保svg中的div与textarea的格式相同,以使插入符号正确对齐,它才有效!

答案 3 :(得分:2)

这是一个补遗。您可以使用字符实体(例如将<div>更改为&lt;div&gt;),它将在textarea中呈现。但是当它被保存时,textarea的值是文本呈现的。所以你不需要解码。我刚刚在浏览器中测试过这个(即回到11)。

答案 4 :(得分:1)

我有相同的问题,但相反,以及以下解决方案。我想把一个div中的html放在textarea中(所以我可以在我的网站上编辑一些反应;我想把textarea放在同一个位置。)

要将此div的内容放在textarea中,我使用:

&#13;
&#13;
var content = $('#msg500').text();
$('#msg500').wrapInner('<textarea>' + content + '</textarea>');
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="msg500">here some <strong>html</strong> <i>tags</i>.</div>
&#13;
&#13;
&#13;

答案 5 :(得分:1)

JSFiddle

上试试这个例子
"My String" | Out-File "xyz.log" -Encoding "utf8"

Jeffrey Crowder编辑 - Web开发人员/ Windows程序员

我添加了一个JS代码的小提琴。

答案 6 :(得分:-2)

这可以通过<textarea>实现 你唯一需要做的就是使用 Summernote WYSIWYG editor

它解释textarea中的HTML标记(即<strong><i><u><a>