HTML:如何在 textarea 中保留格式?

Posted

技术标签:

【中文标题】HTML:如何在 textarea 中保留格式?【英文标题】:HTML : How to retain formatting in textarea? 【发布时间】:2012-02-07 01:34:00 【问题描述】: 我正在使用 html textarea 让用户输入一些数据并将其保存到 App Engine 的模型中 问题是当我检索内容时它只是文本并且所有格式都消失了 原因是因为在 textarea 中没有我们可以制作的格式

问题:

有没有办法保留用户提供的格式? 还有其他元素(除了 textarea),我必须使用吗?(哪一个?)

P.S 我对 Web 开发领域非常陌生,正在做我的第一个项目

谢谢

【问题讨论】:

【参考方案1】:

你想要的是Rich Text Editor。标准 HTML <textarea> 标签只接受纯文本(即使文本是或包含 HTML 标记)。那里有很多示例(包括链接页面上列出的一些示例),但我强烈建议为此使用预先打包的示例。对于新手,甚至对于很多有经验的人来说,自己编写代码是相当复杂的。 TinyMCE 和 CKEditor 都是很常见的,但还有很多其他的。

【讨论】:

【参考方案2】:

文本框就像写字板,你不能格式化它,如果你从 word 或任何其他格式化的文本中粘贴,它会擦除​​所有的格式,你只剩下文本。

您需要在文本区域添加一个编辑器,我使用TinyMCE,但也有很多其他的。

要实现,您需要在您的 Web 目录中拥有所有源代码(可以从 TinyMCE 获得)。

这是一个您可以尝试的示例:

将此添加到页面的头部:

<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:

<textarea name="content" style="width:100%">YOUR TEXT HERE</textarea>

注意:您需要下载 &lt;script language="javascript" type="text/javascript" src="/js/tiny_mce/tiny_mce.js"&gt;&lt;/script&gt; 的 js 文件并将其放在您的目录中

希望这会有所帮助!

【讨论】:

【参考方案3】:

如果您希望某人能够格式化他们的文本(例如使用所见即所得的粗体按钮等),但如果您希望能够接受预先格式化的 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>

这使用contenteditable div 元素,您可以将其格式化为输入框并接受粘贴的HTML,并使用隐藏的textarea#foo 在提交表单之前填充粘贴的HTML。

请注意,这不是一个可访问的解决方案。

【讨论】:

这是最简单的解决方案。感谢 contenteditable 属性。拯救了我的一天!【参考方案4】:

根据您对程序的目标,只需在文本区域的输入左右添加“pre”标签就足够了。例如,如果您的代码提交到文本区域内的任何表单,然后在目标文件中回显它,这已经可以工作了。

> 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

这已经将保留所有输入,例如在原始用户输入中使用的输入并正确回显它们

如果您从 App Engine 检索内容,在大多数情况下保存内容并添加 pre 标签就可以了

【讨论】:

以上是关于HTML:如何在 textarea 中保留格式?的主要内容,如果未能解决你的问题,请参考以下文章

将 Spark TextArea 文本复制到另一个 Spark TextArea

如何在 textarea 表单帖子中保留空格和格式? [复制]

Html—让textarea标签中的内容原格式输出的两种办法

使用带有textarea文本的jQuery追加时如何处理回车

如何在 textarea 文本更改上保留光标位置?

在 <textarea> 中格式化文本?