当前位置: 首页 > news >正文

文本换行问题

目录

问题描述

问题解决

前端解决(推荐)

1.<br>替换

2.使用CSS属性white-space(推荐)


问题描述

前端中的<textarea>标签输入多行文本,传输到MySQL数据库后,再取出渲染到一个<div>标签中,出现“文本不换行,文字挤在一起

具体问题如下图所示:

<textarea>的内容转移到<div>时,不会自动换行

问题解决

分析问题后,问题可以由“前端”或者“后端”两个方面解决。

为方便,这里使用“点击按钮”的方式,来模拟前端从后端获取数据的过程

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><style>html,body {margin: 0;padding: 0;}.container {height: 100vh;display: flex;flex-direction: column;justify-content: center;align-items: center;gap: 20px;background-color: #ccc;}#myTextarea {width: 50%;height: 200px;font-size: 16px;}#myDiv {background-color: white;}</style>
</head><body>
<div class="container"><textarea id="myTextarea"></textarea><button id="myButton">点击</button><div id="myDiv"></div>
</div>
<script>
window.onload = function () {const button = document.getElementById('myButton');const textarea = document.getElementById('myTextarea');const div = document.getElementById('myDiv');button.addEventListener('click',function (){div.textContent = textarea.value;})
}
</script>
</body></html>

前端解决(推荐)

1.<br>替换

在将文本渲染到div前,可以用JavaScript将换行符替换为HTML的换行标签<br>

const text = textarea.value.replace(/\n/g,'<br>');
div.innerHTML = text;

效果:

  • 问题:这种方式必须使用innerHTML渲染,这样容易被XSS攻击,不建议使用

2.使用CSS属性white-space(推荐)

无需修改文本,直接通过CSSdiv保留换行符

#myDiv {background-color: white;white-space: pre-wrap; /* 保留换行和空格,自动换行 */
}

扩展

  • white-space:pre-wrapwhite-space:pre都是CSS中用于控制文本空白(空格、换行等)显示方式的属性,但是它们在处理“自动换行”的行为上有明显区别
属性值空白处理自动换行处理应用场景
pre保留所有空格和换行不自动换行,内容会超出容器宽度代码块,需要严格保留格式的文本
pre-wrap保留所有空格和换行自动换行,内容会适应容器宽度普通文本

da 

使用pre

使用pre-wrap

总之,不管使用prepre-wrap都可以保留文本中的换行,并且此时不需要使用“innerHTML”,可以很好的避免XSS攻击

http://www.lryc.cn/news/609111.html

相关文章:

  • Jetson Orin NX/NANO+ubuntu22.04+humble+MAVROS2安装教程
  • 【从零开始学习Redis】初识Redis
  • [Oracle] DUAL数据表
  • CAP 理论笔记
  • 推荐系统学习笔记(九)曝光过滤 Bloom Filter
  • 【领域热点】【Vue】Vue 与 WebAssembly:前端性能优化的黄金搭档
  • 自动驾驶中的传感器技术18——Camera(9)
  • Connection refused: no further information: localhost/127.0.0.1:2375
  • docker 可用镜像列表(长期免费)
  • Azure DevOps — Kubernetes 上的自托管代理 — 第 4 部分
  • Docker环境离线安卓安装指南
  • centos9 安装docker engine
  • C++ : 反向迭代器的模拟实现
  • Java基本技术讲解
  • 深入解析C++函数重载:从原理到实践
  • 【1】WPF界面开发入门—— 图书馆程序:登录界面设计
  • K8S部署ELK(五):集成Kibana实现日志可视化
  • B+树索引结构原理解析与最佳实践
  • 创建型设计模式:对象诞生的艺术与智慧
  • 设计模式学习[17]---组合模式
  • 控制建模matlab练习06:比例积分控制-②PI控制器
  • 【stm32】按键控制LED以及光敏传感器控制蜂鸣器
  • STM32-驱动OLED显示屏使用SPI(软件模拟时序)实现
  • Spring Boot 的事务注解 @Transactional 失效的几种情况
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-55,(知识点:STM32,外设及其特点)
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第四天(DOM编程和AJAX异步交互)
  • 08【C++ 初阶】类和对象(下篇) --- 类知识的额外补充
  • MySQL 事务原理 + ACID笔记
  • 计算机网络(TCP篇)
  • Python3 中使用zipfile进行文件(夹)的压缩、解压缩