textarea换行属性(处理textarea中的换行和空格)
textarea换行属性
处理textarea中的换行和空格当我们使用 textarea 在前台编辑文字,并用 js 提交到后台的时候,空格和换行是我们最需要考虑的问题。在textarea 里面,空格和换行会被保存为/s
和/n
,如果我们前台输入和前台显示的文字都是在 textarea 里面,其实并不需要做任何处理,你在 textarea 里面编写的样式会按照你之前编辑时候的样式,正确的显示出来。
那么如果你需要 textarea 编辑提交的文字,从后台返回之后,不是显示在 textarea 里面,那么就需要考虑处理空格和换行啦。
其实之前在接触的时候,完全没有考虑过这些问题,也是因为最近做的项目里面有一个这样子的需求,要求用户在 textarea 输入文字,提交之后以文章的格式显示在页面上。不管用户输入的时候打了多少空格,默认每段文字都只缩进2个字符,且要考虑用户上传的诗歌形式,也就是每个段落之间可能有两行空白。总而言之一句话总结呢,就是—去掉用户的输入的空格,保留段落之间的换行。
那么我最终的做法就是,在保存的时候还是不做任何处理,直接保存到后台。显示的时候,从后台获取到文本之后,去掉文中的所有空格,然后显示在<pre>
标签里面。
这里我用一个小例子来示意一下textarea在各种情况下的保存和显示。首先创建一个简单的 html 页面,为了方便获取数据和显示,我引入 vue 来处理数据,给提交按钮绑定一个点击事件,点击确定之后,显示在下面。基本的页面结构和 js 如下:
<li class="app"> <p>请输入内容:</p> <textarea name="t1" rows="8" cols="80" v-model="text1"></textarea> <button>提交</button> <p>显示的内容:</p> <textarea name="t2" id="" cols="80" rows="8" v-model="text2"></textarea> </li> // js部分 const vm = new Vue({ el:'#app', data:{ text1:'', text2:'' }, methods:{ submitText(){ this.text2 = this.text1; } } })
不处理空格和换行 显示在 textarea 里面
这一步就很简单了,直接点击提交,可以看到效果,如下图。在未做任何处理的情况下,保留了所有的空格和换行,适合保存再编辑。
不处理空格和换行 显示在 li 里面
把刚刚第二个 textarea 替换成 li ,效果如下图。可以看到空格和换行符都没有被处理出来,直接被忽略掉了。
<li id="app"> <p>请输入内容:</p> <textarea name="t1" rows="8" cols="80" v-model="text1" ></textarea> <button @click="submitText">提交</button> <p>显示的内容:</p> <p>{{text2}}</p> </li>
不处理空格和换行 显示在 pre 标签里面
将 li 替换成 pre 标签,将提交的文本显示在 pre 标签里面。pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符,他比较常见的应用就是用来显示代码,在技术网站和博客的页面里面,pre 标签都是用来包裹代码块的。
可以从下图的效果看出,pre 标签也可以完全实现保留用户所输入的空格和换行,看上去似乎能够达到我的基本需求了。那么接下来的问题就是,如何去掉空格,并且实现自动缩进2个字符。
<li id="app"> <p>请输入内容:</p> <textarea name="t1" rows="8" cols="80" v-model="text1" ></textarea> <button @click="submitText">提交</button> <p>显示的内容:</p> <pre>{{text2}}</pre> </li>
那么我试试直接给 pre 标签设置 css 属性text-index:2em;
?这样能够实现需求吗?答案显然是不行,因为这个属性规定的是块级元素首行文本的缩进,而这里从始至终都只有一个块级元素 pre ,显然是不能实现。而且我们还要考虑到用户自己输入的空格。
替换空格保留换行
既然直接显示行不通,看来还是必须要处理文本,那我们就处理一下。首先尝试,去掉所有的空格,首先想到的就是trim()
方法。思路就是,以换行符为分割,获取到每一段文本,然后用trim()
方法去掉文本前后的空格,用
标签把每段文字包裹起来,再把每一段用<br>
换行标签拼接起来。同时,不用pre
标签来显示文本了,直接将处理过后的的 html 片段插入到 li 标签里面,这里用到的是 vue 的 v-html 属性。
<li id="app"> <p>请输入内容:</p> <textarea name="t1" rows="8" cols="80" v-model="text1" ></textarea> <button @click="submitText">提交</button> <p>显示的内容:</p> <li v-html="text2" style="text-indent:2em;"></li> </li> // js部分 submitText(){ let arr = []; this.text1.split('\n').forEach(item=>arr.push(`<p>${item.trim()}</p>`)); this.text2 = arr.join('<br>'); }
如下图所示,基本实现自动缩进和保留换行啦。
下面我们输入一段诗歌,加上一些样式,看看最终效果如何:
再输入一段文章,输入的时候打乱文章的缩进,可以看到不管我们如何缩进,显示效果始终都是缩进两个字符,那么就实现需求啦!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
- mysql数据库怎么换行(MySQL数据中很多换行符和回车符的解决方法)
- CSS中英文换行和不换行
- html自适应怎么没有滚动条(如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度)
- dedecms标签怎么调用(dedecms织梦系统内容页英文字母不换行的解决方法)
- dedecms编辑器教程(Dedecms v5.7 编辑器默认回车键换行改为换段落的修改方法)
- 为什么css中float:right后右对齐换行
- textarea换行属性(处理textarea中的换行和空格)
- css自动换行左右对齐(CSS自动换行、强制不换行、强制断行、超出显示省略号)
- css怎样设置文字不换行(css是如何实现在页面文字不换行、自动换行、强制换行的方法)
- php换行乱码(php输出文字乱码的解决方法)
- 用php调用函数的换行(php中关于换行的实例写法)
- css控制表格换行
- display flex 布局(解决display:flex属性 justify-content: space-between换行后的排版问题)
- 如何处理textarea换行
- 百事大吉蓝底 绿底手机高清壁纸(绿底手机高清壁纸)
- 蓝底证件照怎么制作 证件照换底色 换尺寸快速搞定(蓝底证件照怎么制作)
- 你喜欢足球吗 足球如何点亮世界的(足球如何点亮世界的)
- 不可分鸽是什么梗(不可分鸽是什么梗)
- 古代的鸽子是爱情的象征,并非和平的使者(古代的鸽子是爱情的象征)
- 一课译词 放鸽子(一课译词放鸽子)
热门推荐
- python pandas 匹配值(python 使用pandas计算累积求和的方法)
- myisam和innodb的区别
- python中startswith使用教程(Python os.access用法实例)
- linux时间同步ubuntu(在Ubuntu中使用NTP实现时间同步)
- 搭建好的ftp服务器在哪里(如何在自己的电脑上搭建FTP服务器?)
- vue自定义组件修饰符(Vue自定义组件使用事件修饰符的踩坑记录)
- php生成json信息(php使用json-schema模块实现json校验示例)
- mysql xml转换json(Mysql将查询结果集转换为JSON数据的实例代码)
- nginx反向代理多个server(Nginx反向代理多个服务器的实现方法)
- MVC过滤器的用法