javascript - CodeMirror批量更改

标签 javascript codemirror

有没有办法批量更改codemirror API? 例如,我使用 changes API 来捕获更改事件,但如果用户按住键盘上的字母之一,他/她将在更改数组中获得多个条目。是否有一个事件可以缓冲这些更改并且仅使用数组中的一个对象进行调用。

Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+delete" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" } editor.jsp:71:3
Object { from: Object, to: Object, text: Array[1], removed: Array[1], origin: "+input" 

最佳答案

change事件总是在用户更改CodeMirror之后发生<textarea> 。然而,这些事件被缓冲为 history -您可以使用 doc.getHistory() 访问、修改和重用您喜欢的对象和doc.setHistory()方法:

var cm = CodeMirror.fromTextArea(document.getElementById('codesnippet_editable'), {
        mode: "javascript",
        theme: "default",
        lineNumbers: true,
        pollInterval: 100
});
    
document.getElementById("foo").addEventListener("click", function () {
    console.log(cm.getDoc().getHistory());  
    //check console for done and undone objects
});

HTML:

<button id="foo">See console after clicking me</button>
    
<textarea rows="4" cols="50" name="codesnippet_editable" id="codesnippet_editable">
// Write some code here
</textarea>

fiddle :http://jsfiddle.net/1kg2y0w5/

您可以使用pollInterval更改历史对象生成的频率

pollInterval: number

Indicates how quickly CodeMirror should poll its input textarea for changes (when focused). Most input is captured by events, but some things, like IME input on some browsers, don't generate events that allow CodeMirror to properly detect it. Thus, it polls. Default is 100 milliseconds.

这也适用于用户按住某个键的情况:尽管按住该键的时间超过了轮询间隔,但只会创建一个对象。

关于javascript - CodeMirror批量更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28980400/

相关文章:

javascript - CodeMirror 自动换行

google-chrome - 类型错误 : Cannot read properties of null (reading 'CodeMirror' )

javascript - 如何使用 codemirror 启用代码提示?

javascript - Google Chrome 是否支持 body onunload() 函数?

javascript - 如何跨多个js文件使用一个函数

javascript - 我如何判断一个对象是否是 jQuery Promise/Deferred?

javascript - 如何使用代码镜像为特定语言进行语法高亮

javascript - Canvas 中的 Onclick 监听器

javascript - 在页面上加载时文本从文档中滑落

javascript - Codemirror 的 SCSS linter