HTML: как сохранить форматирование в textarea? - PullRequest
16 голосов
/ 10 января 2012
  • Я использую текстовую область HTML для пользователя, чтобы ввести некоторые данные и сохранить их в модели App Engine
  • Проблема заключается в том, что при извлечении контента это просто текст, и все форматирование пропало
  • Причина в том, что в textarea нет форматирования, которое мы можем сделать

Вопрос:

  • есть ли способ сохранить формат, предоставленный пользователем?
  • есть ли какой-либо другой элемент (кроме textarea), который мне придется использовать? (Какой?)

PS Я очень новичок в области веб-разработки иработаю над моим первым проектом

Спасибо

Ответы [ 3 ]

10 голосов
/ 10 января 2012

Текстовое поле похоже на wordpad, вы не можете отформатировать его, если вставить текст из слова или любого другого отформатированного текста, оно уничтожит все форматирование и у вас останется только текст.

Вам нужно добавить редактор для текстовых областей, я использую TinyMCE , но есть и много других.

Для реализации вам нужно иметь весь источник (который вы можете получить из 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 name="content" style="width:100%">YOUR TEXT HERE</textarea>

NB. Вам необходимо скачать и иметь в своем каталоге файлы js для <script language="javascript" type="text/javascript" src="/js/tiny_mce/tiny_mce.js"></script>

Надеюсь, это поможет!

9 голосов
/ 10 января 2012

То, что вы хотите, это Rich Text Editor .Стандартный тег HTML <textarea> принимает только простой текст (даже если текст содержит или содержит HTML-разметку).Существует множество примеров (в том числе перечисленных на странице, на которую дана ссылка), но я настоятельно рекомендую использовать для этого заранее расфасованный.Кодирование самостоятельно довольно сложно для новичков и даже для многих, у которых есть некоторый опыт.И TinyMCE и CKEditor очень распространены, но есть и много других.

3 голосов
/ 12 марта 2014

Это не решит ситуацию, когда вы хотите, чтобы кто-то мог форматировать свой текст (например, с помощью жирных кнопок WYSIWYG и т. Д.), Но если вы хотите иметь возможность принимать предварительно отформатированный 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 непосредственно перед отправкой формы.

Обратите внимание, что это не является доступным решением в его нынешнем виде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...