【问题标题】:Show html tags as a text将 html 标签显示为文本
【发布时间】:2016-07-19 15:25:22
【问题描述】:

我正在为我的网站制作小型 html 编辑器。

我的编辑器

<textarea class="editor"></textarea>

示例窗口

<div class="results"></div>

Javascript 和 JQuery

function textarea_post(){
    var text = $(".editor").val();
    text = text.replace(/<code>/g,"<pre>").replace(/<\/code>/g,"</pre>");
    $(".results").html(text);
}

$(".editor").on("keydown keyup paste",function(e){
    textarea_post();
});

我的代码将编辑器中的&lt;code&gt;&lt;/code&gt;标签替换为&lt;pre&gt;&lt;/pre&gt;标签。

问题是你不能在&lt;pre&gt;&lt;/pre&gt;之间做html代码sn-p。
html代码需要在&lt;pre&gt;&lt;/pre&gt;之间显示为文本而不是html本身。

&lt;pre&gt;&lt;/pre&gt;以外的其他标签需要显示为html

【问题讨论】:

  • 尝试使用$(".results").text(text);而不是$(".results").html(text);
  • 我需要使用$(".results).html(text),因为 ´
    ´ 之外的其他标签需要显示为 html,例如我的 ´

    Example

    ´
  • 请查看我更新的答案。我用几个示例字符串对其进行了测试,它似乎工作正常。

标签: javascript jquery html editor


【解决方案1】:

我认为你正在尝试做的大部分事情都可以通过 css 来完成;你的 javascript 似乎没问题;但您的 html 需要稍作调整,因为中心标签已弃用且 html 不支持。

看看这个 sn-p 或fiddle(只需在文本区域末尾按回车键)

编辑:已更新以包含来自 Mohit 的更好的脚本,但请注意中心标签!

function textarea_post() {
   var text = $(".editor").val();
    text = text.replace(/<code>/g,"<pre>").replace(/<\/code>/g,"</pre>");
    $(".results").html(text);
    $(".results pre").each(function(){
      var escapedText = $(this).html();
      $(this).text( escapedText );
    });
}

$(".editor").on("keydown keyup paste", function(e) {
 if (e.which==13){
  textarea_post();
  }
});
textarea, .editor {
  width: 80vw;
  height: 150px;
  overflow-y:scroll;
}

h2 {
  text-align: center;
  background-color:white;
  color:darkblue;
  margin-top:0;
  border-bottom:1px #000 dashed;
}
.results{background-color:lightgrey;
width:80vw;
border:1px solid;
overflow-y:scroll;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea class="editor">
  <h2>Example 1</h2>
  <code>
    function MyFunction(a, b){
     return a+b;
    }
    MyFunction(5, 10)
    <h1>hello</h1>
  </code>


</textarea>

<div class="results"></div>

希望这会有所帮助 - 如果这不是预期的效果/如果我有误解,请发表评论。

【讨论】:

  • 如果您尝试在&lt;code&gt;&lt;/code&gt; 标签之间编写html 代码sn-p,它就会消失。示例´&lt;em&gt;&lt;/em&gt;´ 它需要在结果中将&lt;em&gt;&lt;/em&gt; 标签显示为文本
  • 如果你慢慢写html代码,你会看到它把&amp;lt;贴为&amp;lt;等等......我真的卡在了这个
  • @Tonza 我认为这可能是最好的选择.. 无论如何,用户只会不时想要代码预览,只需发布​​注释按回车即可预览
【解决方案2】:

试试这个:

function textarea_post(){
    var text = $(".editor").val();
    text = text.replace(/<code>/g,"<pre>").replace(/<\/code>/g,"</pre>");
    $(".results").html(text);
    $(".results pre").each(function(){
      var escapedText = $(this).html();
      $(this).text( escapedText );
    });//
}

$(".editor").on("keydown keyup paste",function(e){
    textarea_post();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<textarea class="editor" rows="15"></textarea>

<div class="results"></div>

【讨论】:

  • hmm 是的,因为只有&lt; 不被视为标签,所以它可能没有被.html() 作为元素拾取。
  • 谢谢@RachelGallen :)
【解决方案3】:

尝试添加以下行:

text = text.replace(/</g,"&lt;").replace(/>/g,"&gt;");

这会将&amp;lt; 字符替换为&amp;lt;,这是小于号的HTML 变体。它还将&amp;gt; 字符替换为&amp;gt;,这是大于号的HTML 变体

【讨论】:

  • 是的,但它只需要替换
    内的标签
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 2015-12-27
  • 1970-01-01
相关资源
最近更新 更多