ace.js实现一个在线代码编辑器[通俗易懂]

ace.js实现一个在线代码编辑器[通俗易懂]TableofContents背景ACE简介:功能实现1、引入js2、初始化组件3、保存时代码语法检测4、效果图:5、遇到的一些问题:背景项目需要,在一些场景,用户需要手动编写一些js脚本来实现自己的功能;前期一直用文本框显示,不便于编辑和查看。因此需要引入一个在线代码编辑器。效果如下:ACE简介:ACE是一个开源的、独立的、基于浏览器的代码编辑器,可以嵌入到任何web页面或JavaScript应用…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

背景

ACE简介:

功能实现

1、引入js

         2、添加控件

3、初始化组件

4、保存时代码语法检测 

5、效果图:

6、官网在线测试: 

7、遇到的一些问题:


背景

      项目需要,在一些场景,用户需要手动编写一些js脚本来实现自己的功能;前期一直用文本框显示,不便于编辑和查看。因此需要引入一个在线代码编辑器。效果如下:

         ace.js实现一个在线代码编辑器[通俗易懂]

ACE简介:

        ACE是一个开源的、独立的、基于浏览器的代码编辑器,可以嵌入到任何web页面或JavaScript应用程序中。ACE支持超过40种语言语法高亮,缩进,代码提示功能且具有大量的主题;并能够处理代码多达404万行的大型文档。ACE开发团队称,ACE在性能和功能上可以媲美本地代码编辑器(如SublimeText、TextMate和Vim等)。

官方网址:https://ace.c9.io
Github地址:https://github.com/ajaxorg/ace

支持语言:java、javascript、json、jsp、markdown、mysql、nginx…

功能实现

1、引入js

   方式一:下载源码   

  下载地址1:https://github.com/ajaxorg/ace-builds/

<!-- 代码编辑ace.js  本地-->
<script src="../js/ace/src-min/ace.js" type="text/javascript"></script>	
<script src="../js/ace/src-min/ext-language_tools.js" type="text/javascript"></script>	

方式二: 引用在线的  

bootstrap中文网提供的cdn服务;http://www.bootcdn.cn/

<!-- 代码编辑ace.js   远程  -->
 <script src="http://cdn.bootcss.com/ace/1.2.4/ace.js"></script>
 <script src="http://cdn.bootcss.com/ace/1.2.4/ext-language_tools.js"></script>

 

2、添加控件

<pre id="codeEditor" class="ace_editor" style="min-height:320px">
 <s:textarea class="ace_text-input"   cssStyle="width:97.5%;height:320px;"/>
</pre>

3、初始化组件

//初始化代码编辑器
	function initEditor(){
		//获取控件   id :codeEditor
		editor = ace.edit("codeEditor");
		//设置风格和语言(更多风格和语言,请到github上相应目录查看)
		theme = "monokai";
		//theme = "terminal";
		//语言
		language = "javascript";
		editor.setTheme("ace/theme/" + theme);
		editor.session.setMode("ace/mode/" + language);
		//字体大小
		editor.setFontSize(15);
		//设置只读(true时只读,用于展示代码)
		editor.setReadOnly(false);
		//自动换行,设置为off关闭
		editor.setOption("wrap", "free");
		//启用提示菜单
		ace.require("ace/ext/language_tools");
		editor.setOptions({
			enableBasicAutocompletion: true,
			enableSnippets: true,
			enableLiveAutocompletion: true
		});
	}

4、保存时代码语法检测 

(正常情况下,输入的代码存在语法错误时会有红色叉号提示;由于本项目中的代码会多达几百行,所以,在保存时需要获取一下编辑的的语法校验结果,存在异常时给出提示。)

        
//获取编辑器中语法校验的结果
var annotations = editor.getSession().getAnnotations();
//错误
var error="";
var errorNum=0;
//警告
var warning="";
var warningNum=0;
//遍历结果 记录提示信息
for(var aid = 0, alen = annotations.length; aid < alen; ++aid) {
	var row=annotations[aid].row+1;
	//存在错误 必须修改
	if(annotations[aid].type === 'error') {
	    var txt=" 行:"+row+";列:"+annotations[aid].column+";  提示:"+annotations[aid].text;
		error+=txt+"<br>";
		errorNum++;
	}
	//存在警告 可以不修改
	if(annotations[aid].type === 'warning'||annotations[aid].type === 'info') {
		var txt=" 行:"+row+";列:"+annotations[aid].column+";  提示 : "+annotations[aid].text;
		warning+=txt+"<br>";
		warningNum++;
	}
}
//存在错误 必须修改
if( error!="") {
	
			
}else {
//存在警告 可以不修改
if(warning!="") {
			 
	} 
        }

5、效果图:

   存在语法错误时(当语法存在错误时,会有红色叉号或黄色叹号,把鼠标放上去会显示提示信息):   ace.js实现一个在线代码编辑器[通俗易懂]

 

 正常时:

ace.js实现一个在线代码编辑器[通俗易懂]

在线效果可参考: https://www.w3cschool.cn/tryrun/runcode?lang=javascript

6、官网在线测试: 

https://ace.c9.io/build/kitchen-sink.html

基本所有的效果都可以在这测试,很方便。

ace.js实现一个在线代码编辑器[通俗易懂]

7、遇到的一些问题:

 1、可校验错误数默认为50个;当超过100多行时或者错误过多少时,之后的代码无法校验语法。所以下载了源码,源码中的错误检测数量(只是js其他的不清楚)。这里js的语法校验时引用了另一个插件 jshint插件;在引用时会有个初始化,初始化里有个参数是maxerr 由默认的50改为10000。  https://www.w3cschool.cn/tryrun/runcode?lang=javascript 也存在这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170425.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Hadoop、Yarn和vcpu资源的配置

    Hadoop、Yarn和vcpu资源的配置

  • 如何把内网IP映射到公网IP

    如何把内网IP映射到公网IP 鸽子出品2017-12-0522:28:22我们讲了如何搭建网站,可是有很多小伙伴私信跟我说怎么映射,今天我就教大家如何把内网地址映射到公网!我们所需要的工具有: 内网IP(这个是品,也是必有的!) nat123(这是映射软件,百度上都能搜索到) 有些小伙伴会问: 这个软件是什么操作系统啊? 这个软件免费吗? 当然官网上有windows版…

  • 一致性哈希算法详解

    一致性哈希算法详解1、使用哈希算法有什么问题?假设有一个由A、B、C三个节点组成的KV服务,每个节点存放不同的KV数据。通过哈希算法,每个key都可以寻址到对应的服务器,比如,查询key是key-01,计算公式为hash(key-01)%3,经过计算寻址到了编号为1的服务器节点A但如果服务器数量发生变化,基于新的服务器数量来执行哈希算法的时候,就会出现路由寻址失败的情况,Proxy无法找到之前寻址到的那个服务器节点假如3个节点不能满足业务需求了,这时增加了一个节点,节点的数量从3变化为4,那么之前的hash(key

  • Protel99se基本教程 Protel 99SE从零开始学习教程视频教程「建议收藏」

    Protel99se基本教程 Protel 99SE从零开始学习教程视频教程「建议收藏」Protel如何从零开始学习?找个有实例的书,或有原理图,有PCB的书,把他画好,先从单面板画起,(找个简单的)自己再热转印法制作PCB,钻孔、焊接元件、调试等等,看似后面与学PROTEL无关,但这些可以让你对PCB布线有更深认识,比如、元件封装尺寸一定要精确、焊盘大小、走线粗细、元件布局放置等等,更能总结好的画图经验!更接近实际应用,这样才能掌握画图的乐趣,当我自己布的PCB的发射机,可以用收音…

  • 机器学习–组合分类方法之随机森林算法原理和实现(RF)

    上一节我们详细的介绍了组合分类方法中的boosting提升算法中经典的adaboost提升算法,当然还有其他的提升算法例如:前向分步算法(adaboost算法是该算法的一个特殊情况,)、提升树算法(基于加法模型和前向分布算法),其中提升树的学习算法即损失函数有:平方误差损失函数、指数损失函数、梯度损失函数等在这里就不细讲他们了,因为他们的算法思想都是基于boost提升的,只是学习算法不同罢了,有兴…

  • springcloud eureka原理和机制_eureka配置详解

    springcloud eureka原理和机制_eureka配置详解SpringCloudEureka原理分析1简介在微服务架构下,服务端环境通常包含多个服务,同时每个服务也是一个无状态的多实例集群。这些服务和实例一般都是会动态变化的,可能会因为意外的故障或者人为的重启发版等原因,这些服务和实例的信息和数量随时会发生改变。因此微服务环境下需要一个服务注册中心来集中管理集群中各个服务实例的状态,这样服务的调用方就可以动态地从服务注册中心获取到当前可用的服务实例来发起调用。Eureka就是服务发现中心的一种。Eureka一开始是由Netflix开源的用于服

    2022年10月19日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号