3

使用 CodeMirror。我无法让 getCursor() 函数工作。我有一个带有代码镜像源的 jsFiddle。

---->看这里 JSfiddle <----

我正在尝试将文本插入编辑器,然后强制光标向后移动指定数量的空格。我只是想用 getCursor() 获取光标位置,但我似乎无法让它工作。有什么想法吗?

$(document).ready(function() {

//Changing the textarea to a CodeMirror rich text editor

var editor = CodeMirror.fromTextArea(document.getElementById('theZone'), {
    mode: 'text/html',
    lineWrapping : true,
    lineNumbers : true,
    extraKeys : {
    "Tab": "indentMore", 
    "Shift-Tab": "indentLess",
    "'>'": function(cm) { cm.closeTag(cm, '>'); },
    "'/'": function(cm) { cm.closeTag(cm, '/'); }
} ,
onCursorActivity: function(cm) {
    cm.setLineClass(hlLine, null, null);
    hlLine = cm.setLineClass(cm.getCursor().line, null, "activeline");
}
});


//When SELECT changes - insert the value into the CM editor, set focus, get cursor   position, move cursor back [x] amount of spaces.
$('#sel').change(function() {
    var selected = $(this).find('option:selected');
    var mynum = selected.data('val');
    editor.replaceSelection($(this).val(), focus);
    editor.focus();
    var start_cursor = editor.getCursor();  //I need to get the cursor position
    alert(start_cursor);  //Cursor position always comes up [object Object]

    //write code to move cursor back [x] amount of spaces. [x] is the data-val value.


});






});
4

2 回答 2

6

代码似乎工作得很好。alert() 不会显示对象。改用 console.log() 。我添加了其余的代码。

    $('#sel').change(function() {
    var selected = $(this).find('option:selected');
    var mynum = selected.data('val');
    editor.replaceSelection($(this).val(), focus);
    editor.focus();
    var start_cursor = editor.getCursor();  //I need to get the cursor position
    console.log(start_cursor);  //Cursor position 
    var cursorLine = start_cursor.line;
    var cursorCh = start_cursor.ch;

    //Code to move cursor back [x] amount of spaces. [x] is the data-val value.
    editor.setCursor({line: cursorLine , ch : cursorCh -mynum });

});
于 2013-07-18T22:47:18.657 回答
0

onCursorActivity对我不起作用。 对我有用:

let myCodeMirror = CodeMirror.fromTextArea(myTextArea, {
    lineNumbers: true,
});

CodeMirror.on(myCodeMirror, "cursorActivity", (instance, obj)=>{        
    console.log(instance.doc.getCursor())
}

每次光标更改包含line数字和ch数字的位置时,这将记录一个对象。

于 2020-05-11T11:38:21.137 回答