给textarea添加行号,textarea使用代码风格的一些思考
背景
项目有个需求是 在textarea中编辑脚本并显示为代码风格样式,显示行号;
textarea显示行号
思路:
1、监听textarea内容变化,执行一个change函数,解析内容里面有多少个换行符,根据换行符数量生成一个带行号的数组;
2、通过css绝对定位将行号定位在textarea左侧
3、滑动滚动条,计算滚动条滑动的距离,赋值给行号列的top
效果:

并且可随滚动条滚动,行号列跟着滚动:

代码:
<template>
<div class="container">
<div class="fatherOrder">
<div class="order" ref="order">
<p v-for="item in numArr" :key="item">{{item}}</p>
</div>
</div>
<textarea name="textarea" id="textarea" @scroll="scrollTextArea" v-model="value" @input="changeTextArea"></textarea>
</div>
</template>
<script>
export default {
data() {
return {
numArr:[],
value:`import something form 'com'\n\n public class A{\n super()\n}`
}
},
methods: {
scrollTextArea(e){
document.getElementsByClassName('order')[0].style.top = -e.target.scrollTop + 1 + 'px'
},
changeTextArea(){
this.numArr = []
let a = this.value
let c = a.split('\n')
for (let i = 1; i < c.length+1; i++) {
this.numArr.push(i)
}
}
},
mounted() {
document.getElementsByClassName('fatherOrder')[0].style.height = document.getElementById('textarea').offsetHeight - 2 + 'px'
this.changeTextArea()
}
};
</script>
显示代码风格
1 、网上查资料让textarea里面的文字变色的方案,但是只支持ie;
var oFont2=document.createElement("FONT");
var oText2=document.createTextNode('人民');
oFont2.style.color="#ff3322";
form1.topic.appendChild(oFont2);
oFont2.appendChild(oText2);
2、通过设置div + contenteditable='true' 将div变成可编辑的块,可以通过字符串replace方法给相应关键字增加颜色;但是无法监听change事件,无法得知里面内容改变后并通知出来;
3、后面尝试将 textarea 和 可编辑的div 定位在一个位置,设置textarea层级高于可编辑的div并将textarea隐藏,这样显示的是可编辑的div,实际上操作的是textarea;虽然可以做到修改textarea,通过字符串替换给关键字添加颜色,回显到可编辑的div上;但操作时鼠标不见了,被div覆盖了,无法选取div上的内容;
4、最终完美的解决方案还是引入了插件 ace-editor代码编辑器使用。
效果如下:

给textarea添加行号,textarea使用代码风格的一些思考的更多相关文章
- 在Visual C++ 6.0中为代码添加行号
由如上代码可知Visual C++ 6.0是没有行号的(新手代码不要在意,重点是没有行号),在编译报错的时候会发现其会指出在第几行错了,如果没有代码行号将很难找到它 为解决这个问题可以安装插件给Vis ...
- Winform DataGridView控件添加行号
有很多种方法,这里介绍三种: A: 控件的RowStateChanged事件中添加,RowStateChanged事件是在行的状态更改(例如,失去或获得输入焦点)时发生的事件: e.Row.Hea ...
- python代码风格指南:pep8 中文翻译
摘要 本文给出主Python版本标准库的编码约定.CPython的C代码风格参见PEP7.本文和PEP 257 文档字符串标准改编自Guido最初的<Python Style Guide&g ...
- 统一代码风格工具——editorConfig
前面的话 在团队开发中,统一的代码格式是必要的.但是不同开发人员的代码风格不同,代码编辑工具的默认格式也不相同,这样就造成代码的differ.而editorConfig可以帮助开发人员在不同的编辑器和 ...
- python的PEP8 代码风格指南
PEP8 代码风格指南 这篇文章原文实际上来自于这里:https://www.python.org/dev/peps/pep-0008/ 知识点 代码排版 字符串引号 表达式和语句中的空格 注释 版本 ...
- 团队协作统一vue代码风格,vscode做vue项目时的一些配置
1. 安装Vetur 扩展 主要是用于让vscode能识别vue文件,对vue代码进行高丽处理,并且它内置了一些代码格式化的设置 2. 安装ESLint 如果你的项目已经开启了eslint规范, 再有 ...
- 微软BI 之SSIS 系列 - 通过 ROW_NUMBER 或 Script Component 为数据流输出添加行号的方法
开篇介绍 上午在天善回答看到这个问题 - SSIS 导出数据文件,能否在第一列增加一个行号,很快就帮助解决了,方法就是在 SQL 查询的时候加一个 ROW_NUMBER() 就可以了. 后来想起在两年 ...
- bootstrap基础学习小记(二)排版、列表、代码风格、表格
排版——标题.副标题.段落(正文文本).强调内容.粗体.斜体.强调相关的类.文本对齐 <!DOCTYPE HTML> <html> <head> <meta ...
- 在VIM中添加行号的方法
VIM编辑器是可以显示行号的.但是,有时候我们需要在整个代码的行首添加行号.怎么实现呢?实现的方法有很多,这里就介绍我知道的一种吧. 在每行行首添加某个字符串 :%s/^/your_string/ 在 ...
- (eclipse)统一文件编码和代码风格
前言 1>每个人的代码风格不一样,以至于代码各式各样,有习惯=号左右加空格的,有习惯不加的,此举有时还会影响svn提交代码 2>注释代码不一样,并且注释风格也不一样 统一文件编码和代码风格 ...
随机推荐
- C++实现简单的日期正则表达式
简单的日期正则表达式 一个简单的日期解析程序,从yyyy-mm-dd格式的日期字符串中,分别获取年月日. 先设置一个简单的正则表达式,4位数字的"年",1-2位数字的"月 ...
- The 18th Zhejiang Provincial Collegiate Programming Contest 补题记录(ACFGJLM)
补题链接:Here A. League of Legends 签到题,求和判断即可 ll suma, sumb; void solve() { ll x; for (int i = 1; i < ...
- [GFCTF 2021]web部分题解(更新中ing)
[GFCTF 2021]Baby_Web 拿源码环节: 打开环境(◡ᴗ◡✿) 乍一看什么都没有,F12下没看到js文件,但是看到了出题师傅的提示:"源码藏在上层目录xxx.php.txt里面 ...
- hybird介绍
什么是hybird? hybrid即"混合",即前端和客户端的混合开发,需要前端开发人员和客户端开发人员配合完成. hybrid存在价值 可以快速迭代更新(无需app审核,思考为何 ...
- C++大整数类
用法 把头文件和源代码文件放在同一目录下,然后#include"INT"即可使用.你能对int类的变量进行a=2,a+=3,a%8,a--等等操作,那你就也能对INT进行.INT基 ...
- java进阶(16)--System常用方法总结
一.Systen.out静态变量 静态变量,用的最多的是调用print方法 二.System.out.println() println()其实是printStream类的方法 三.Sytem ...
- React技巧之设置input值
原文链接:https://bobbyhadz.com/blog/react-set-input-value-on-button-click 作者:Borislav Hadzhiev 正文从这开始~ 总 ...
- springboot启动流程 (3) 自动装配
在SpringBoot中,EnableAutoConfiguration注解用于开启自动装配功能. 本文将详细分析该注解的工作流程. EnableAutoConfiguration注解 启用Sprin ...
- spring-transaction源码分析(2)EnableTransactionManagement注解
概述(Java doc) 该注解开启spring的注解驱动事务管理功能,通常标注在@Configuration类上面用于开启命令式事务管理或响应式事务管理. @Configuration @Enabl ...
- 如何让Dec-C++支持C++11
1.问题 Dev-C++默认设置中是不支持C++11版本特性的,如Lambda表达式,nullptr等均不提供支持 2.解决 设置编译选项 编译时加上命令-std==c++11即可