HTML:如何在文本区域中保留格式?

18
  • 我正在使用HTML文本区域来让用户输入一些数据并将其保存到App Engine的模型中。
  • 问题是,当我检索内容时,它只是文本,所有格式都消失了。
  • 原因是因为在文本区域中没有我们可以制定的格式。

问题:

  • 有没有办法保留用户提供的格式?
  • 是否有其他元素(除文本区域外),我必须使用?(应该使用哪个?)

P.S 我非常新颖于Web开发领域,并且正在处理我的第一个项目。

谢谢

答案:
  • 有没有办法保留用户提供的格式?
    • 可以使用所谓的所见即所得编辑器(What You See Is What You Get editor) 来保留用户提供的格式。例如,TinyMCE或CKEditor等富文本编辑器。
  • 是否有其他元素(除文本区域外),我必须使用?(应该使用哪个?)
    • 可以尝试使用富文本编辑器来代替纯文本区域。这将使用户能够使用格式化工具栏来指定所需的文本样式和布局。
4个回答

10
你需要的是一个富文本编辑器。标准的HTML <textarea>标签只接受纯文本(即使文本包含HTML标记)。有很多例子可以参考(包括链接页面上列出的一些),但我强烈建议使用预先打包好的编辑器。对于新手来说,编写自己的编辑器相当复杂,即使对于许多有经验的人也是如此。TinyMCECKEditor都是非常常见的编辑器,但还有许多其他的选择。

10

文本框就像WordPad一样,你无法对其进行格式化。如果你从Word或其他带格式的文本中复制粘贴,它将清除所有格式,使你只剩下文本。

你需要为文本区域添加编辑器,我使用 TinyMCE,但还有许多其他的编辑器可供选择。

为了实现这个功能,你需要将所有源代码(可以从TinyMCE获取)放入你的Web目录中。

以下是一个示例:

将以下内容添加到你页面头部:

<script language="javascript" type="text/javascript" src="/js/tiny_mce/tiny_mce.js"></script>

<script language="javascript" type="text/javascript">
tinyMCE.init({
theme : "advanced",
mode: "exact",
elements : "elm1",
theme_advanced_toolbar_location : "top",
theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,"
+ "justifyleft,justifycenter,justifyright,justifyfull,formatselect,"
+ "bullist,numlist,outdent,indent",
theme_advanced_buttons2 : "link,unlink,anchor,image,separator,"
+"undo,redo,cleanup,code,separator,sub,sup,charmap",
theme_advanced_buttons3 : "",
height:"350px",
width:"600px"
});

</script>

<script type="text/javascript">
tinyMCE.init({
    // General options
    mode : "textareas",
    theme : "advanced",
    plugins : "autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",

    // Theme options
    theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
    theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
    theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
    theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,spellchecker,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,blockquote,pagebreak,|,insertfile,insertimage",
    theme_advanced_toolbar_location : "top",
    theme_advanced_toolbar_align : "left",
    theme_advanced_statusbar_location : "bottom",
    theme_advanced_resizing : true,

    // Skin options
    skin : "o2k7",
    skin_variant : "silver",

    // Example content CSS (should be your site CSS)
    content_css : "css/example.css",

    // Drop lists for link/image/media/template dialogs
    template_external_list_url : "js/template_list.js",
    external_link_list_url : "js/link_list.js",
    external_image_list_url : "js/image_list.js",
    media_external_list_url : "js/media_list.js",

    // Replace values for the template plugin
    template_replace_values : {
            username : "Some User",
            staffid : "991234"
    }
});
</script>

然后调用文本区域:

<textarea name="content" style="width:100%">YOUR TEXT HERE</textarea>
注:您需要下载并在目录中拥有 js 文件 <script language="javascript" type="text/javascript" src="/js/tiny_mce/tiny_mce.js"></script> 希望这可以帮助你!

5

如果你想让别人能够使用所见即所得的粗体等按钮来格式化文本,这种方法就不适用,但是如果你想接受预先格式化好的HTML(例如从其他HTML源如网页复制粘贴),那么你可以这样做:

<form ...>
<label>Paste your HTML in the box below</label>
<textarea style='display:none' id='foo'></textarea>
<div id='htmlsource' contenteditable style='border:solid 1px black;padding:1em;width:100%;min-height:2em;' ></div>
<input type='submit' />
</form>

<script>
jQuery(function(){
    jQuery('form').submit( function(e) {
        jQuery('textarea').val( jQuery('#htmlsource').html() );
      });
});
</script>

这个技术使用了一个可编辑的 div 元素,你可以将其格式化成一个输入框,并接受粘贴的HTML内容。同时还有一个隐藏的 textarea#foo ,在表单提交之前会被填充上粘贴的HTML。

需要注意的是,这并不是一个无障碍的解决方案。


1
这是最简单的解决方案。感谢contenteditable属性。救了我的一天! - Rasika

0
根据您编程的目标,只需在文本区域的输入左右添加“pre”标签即可足够。例如,如果您的代码将textarea中的任何内容提交到表单中,然后在目标文件中回显它,那么这个方法已经可以使用了。
> File 1:
> 
>     <form action="Output.php" methode=post>
>     <textarea name="Input"></textarea>
>     </form>
> 
> File Output.php
> 
>     $UserInput = $_POST["Input"];
>     $UserInput = "<pre>" . $UserInput . "</pre>"
>     echo $UserInput

这个已经可以保留所有的回车,例如在原始用户输入中使用并正确地显示它们

如果您从应用引擎检索内容,并添加了预置标签保存内容,那么大多数情况下就可以解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接