问题描述:textarea元素中编辑带有格式的文本,无法按照原格式输出。举个例子,一个页面有textarea元素,一个div,一个按钮,当点击按钮时,将textarea中的值显示在div中。

<html>
<body>
    <textarea cols="10" rows="10"></textarea>
    <div></div>
    <button type="button">点击</button>
</body>
</html>
<script type="text/javascript">
   $('button').click(function(){
        $('div').html($('textarea').val());
   })
</script>

演示效果如图:

element自动换行 element textarea换行_数据

可以看到,在textarea中输入了3行文字,第3行文字中加了好多空格,可是获取其value值后显示在div中是没有任何格式的。

原因:在textarea中,当我们敲下回车时,实际上是生成了一个换行标记\n。而\n在浏览器中渲染时,不具有换行效果。浏览器中渲染换行需要<br />标记。所以,我们只需要将textarea中的换行标记\n换成浏览器的换行标记<br />即可。同理,空格标记为\s,换成&nbsp;

方法:

①使用JS字符串对象的方法replace

将textarea中所有的\n和\s分别替换成<br />和&nbsp;

<script type="text/javascript">
   $('button').click(function(){
        var new_str = $('textarea').val().replace(/\n|\r\n/g,'<br>').replace(/\s/g,' ');
        $('div').html(new_str);
   })
</script>

效果如图:

element自动换行 element textarea换行_数据库_02

说明:a. replace中第一个参数是正则表达式,以/ /作为开始和结束标记,\n|\r\n表示\n或者\r\n标记,g表示所有的。b. 由于不同操作系统换行标记不同,在windows下是\n,所以采用\n|\r\n进行操作系统换行符的兼容。c. 为什么换成<br>而不换成<br />,大家都可以试试,哪个管用用哪个。有时后者会存在问题,因为结束标记/会被识别成其他含义。

②存入数据库后用php读取

我们很少直接将textarea中的数据按格式输出。它作为表单元素,一般都是要存入数据库中的,然后在需要的时候调用。

我们首先看看将数据存入数据库后数据的样子。

element自动换行 element textarea换行_php_03

element自动换行 element textarea换行_操作系统_04

第一个字段的数据类型是varchar,第二个字段的数据类型是text。

可以看出,如果将textarea中的value值储存在varchar类型中,换行是无效的,而空格会保留;而在text类型中,空格和换行都会保留。

我们试着从数据库中读取这2个字段的数据,显示在div中,发现两者显示结果一样,如图:

element自动换行 element textarea换行_php_05

也就是说,不管是什么类型,我们存入数据库时都可以不做任何处理,直接将textarea的值value值写入数据库;而在读取的时候,同样将\n等换成对应标记。在php中提供的正则替换方法为:

<?php
	$patterns = array('/\n|\r\n/','/\s/');
	$replace = array('<br>',' ');
	echo preg_replace($patterns, $replace, $row) ;
?>

其中$patterns是正则表达式,要进行换行和空格匹配,所以采用数组;$replace是换成怎样的标记;$row就是储存在数据库中的数据。