我应该如何更改 ace 编辑器上的元素内容
How should I change elements content on ace editor?
我正在尝试使用input type=range
更改ace编辑器上某些元素中的文本,但是当我尝试再次编写时,编辑器返回到使用javascript修改之前的先前值
var editordiv = document.getElementById("editor");
var editor = ace.edit("editor");
editor.getSession().setMode("ace/mode/javascript");
var elem;
editordiv.onmousedown=function(e){
if(e.target.classList.contains("ace_numeric")) elem=e.target;
}
function changeElement(range){
if(elem) elem.textContent=range.value; //not changing correctly editor content
}
#editor{
position:absolute;
width:100%;
height:100%;
}
.ace_constant {
pointer-events:auto !important;
}
#range{
position:absolute;
right:0;
}
<script src="https://cdn.jsdelivr.net/ace/1.2.3/noconflict/ace.js"></script>
<div id="editor">var i=30;
var j=70;</div>
<input type="range" id="range" oninput="changeElement(this)">
如何正确更改数字的值并在 ace 编辑器中保留历史记录?
好的
,我找到的解决方案比预期的要复杂一些:
var elem = undefined;
var rn = undefined;
function changeElement(range){
if(rn) editor.session.replace(rn,range.value); //input value into range text
}
editor.on("mousemove",function(e){
if(e.domEvent.target.classList.contains("ace_numeric")){
elem = e.domEvent.target;
var position = e.getDocumentPosition();
var token = editor.session.getTokenAt(position.row, position.column+1);
if(token.value.match(/^[+-]?[.'d]+$/)) //token value is a number
rn = new Range(position.row, token.start, position.row, token.start+elem.textContent.length); //range of text in editor
}
});
不要替换 dom 元素,而是在鼠标向下保存范围位置,并在输入范围更改时替换文本。
您需要通过编辑器界面更改编辑器的内容,而不是通过在编辑器中修改 dom。一种稍微混乱的方法是 editor.replace
.您可以根据需要调整正则表达式/参数:
var editordiv = document.getElementById("editor");
var editor = ace.edit("editor");
editor.getSession().setMode("ace/mode/javascript");
function changeElement (range) {
editor.replace('=' + range.value + ';', {needle: /='d+;/});
}
#editor{
position:absolute;
width:100%;
height:100%;
}
.ace_constant {
pointer-events:auto !important;
}
#range{
position:absolute;
right:0;
}
<script src="https://cdn.jsdelivr.net/ace/1.2.3/noconflict/ace.js"></script>
<div id="editor">var i=80;</div>
<input type="range" id="range" oninput="changeElement(this)">
相关文章:
- Webdriver.io pageObject模式-通过传递参数来定义元素选择器
- 一个页面上有多个Ace编辑器,没有预先设置元素
- 我在Phaser有一个项目.我想在画布上的元素上做一个用户图像编辑器
- 如何通过元素选择器获取tinyMCE编辑器实例
- ckeditor内联编辑器在iframe中的元素上
- 如何在TinyMCE 4中将多个元素添加到自定义菜单中,并在单击时在编辑器画布上显示其内容
- 任何 html 元素的 Javascript 样式编辑器工具栏
- TinyMCE 编辑器中的目标元素
- 拖放html元素或编辑器
- TinyMCE编辑器只显示在第一个元素上
- Magento所见即所得编辑器错误:找不到内容更新的目标元素
- 使用"span"创建一个自定义的基于web的文本编辑器;元素——一个坏主意
- 向编辑器中的元素添加悬停事件
- 标题元素在UIKit HTML编辑器
- Wysiwyg HTML编辑器内置在HTML /javascript的位置绝对元素
- 如何在编辑器对话框输入元素中添加自动完成选项
- 在编辑器中查找和选择元素
- Midas(壁虎富文本编辑器)在XUL中通过<编辑>元素无法启用
- 我应该如何更改 ace 编辑器上的元素内容
- 将类添加到编辑器中的前置和代码元素