设置文本光标在文本区域中的位置
Set text-cursor position in a textarea
我正在研究BBCode编辑器,这是代码:
var txtarea = document.getElementById("editor_area");
function boldText() {
var start = txtarea.selectionStart;
var end = txtarea.selectionEnd;
var sel = txtarea.value.substring(start, end);
var finText = txtarea.value.substring(0, start) + '[b]' + sel + '[/b]' + txtarea.value.substring(end);
txtarea.value = finText;
txtarea.focus();
}
一切都很好,除了一件事是文本光标的位置。当我单击粗体文本按钮时,它会在文本区域的末尾设置光标位置!!
实际上,我希望能够在某个索引处设置光标位置。我想要这样的东西:
txtarea.setFocusAt(20);
使用 txtarea.focus()
重新聚焦文本区域后,添加以下行:
txtarea.selectionEnd= end + 7;
这将使光标比之前的位置提前七个位置,这将考虑[b][/b]
。
例
document.getElementById('bold').addEventListener('click', boldText);
function boldText() {
var txtarea = document.getElementById("editor_area");
var start = txtarea.selectionStart;
var end = txtarea.selectionEnd;
var sel = txtarea.value.substring(start, end);
var finText = txtarea.value.substring(0, start) + '[b]' + sel + '[/b]' + txtarea.value.substring(end);
txtarea.value = finText;
txtarea.focus();
txtarea.selectionEnd= end + 7;
}
#editor_area {
width: 100%;
height: 10em;
}
<button id="bold">B</button>
<textarea id="editor_area"></textarea>
如果你使用的是jquery,你可以这样做。
$('textarea').prop('selectionEnd', 13);
您可以使用下面由Jamie Munro(setSelectionRange()
&setCaretToPos()
编写的2个函数:
function setSelectionRange(input, selectionStart, selectionEnd) {
if (input.setSelectionRange) {
input.focus();
input.setSelectionRange(selectionStart, selectionEnd);
}
else if (input.createTextRange) {
var range = input.createTextRange();
range.collapse(true);
range.moveEnd('character', selectionEnd);
range.moveStart('character', selectionStart);
range.select();
}
}
function setCaretToPos (input, pos) {
setSelectionRange(input, pos, pos);
}
例:
例如,如果要在文本区域的末尾设置插入符号,则可以使用以下内容: setCaretToPos(document.getElementById('textarea'), -1);
意识到这是一个较老的问题,现在仅将其作为选项提供,因为它可能比提取和组装文本区域值字符串的片段更有效,并且它根据setRangeText
和自动对焦的第四个参数自动设置光标。 它可以在Firefox 66.0.02中工作,我没有在其他地方测试过它。光标位于"[/b]"之后。
t = document.getElementById("editor_area");
b = t.selectionStart,
e = t.selectionEnd + 3; // length of '[b]'
t.setSelectionRange( b, b );
t.setRangeText( '[b]' );
t.setSelectionRange( e, e );
t.setRangeText( '[/b]', e, e, 'end' );
通过 JQuery:
var cursorPos = $('#textarea').prop('selectionStart');
$('#textarea').prop('selectionEnd',cursorPos-2);
这有点OT,但如果有人感兴趣:
- 简介:通过行和列在输入元素内设置光标
-
依赖性:来自@ashkan纳西尔扎德的
setSelectionRange()
-
示例调用:
setTextCursor(textarea,textarea.val, 0, 1);
// @brief: set cursor inside _input_ at position (column,row) // @input: input DOM element. E.g. a textarea // @content: textual content inside the DOM element // @param row: starts a 0 // @param column: starts at 0 function setTextCursor(input, content, row, column){ // search row times: var pos = 0; var prevPos = 0; for( var i = 0; (i<row) && (pos != -1); ++i){ prevPos = pos; pos = content.indexOf("'n",pos+1); } // if we can't go as much down as we want, // go as far as worked if(-1 == pos){ pos = prevPos; } if(0 != row) ++pos; // one for the linebreak // prevent cursor from going beyond the current line var lineEndPos = content.indexOf("'n", pos+1); if((-1 != lineEndPos) && (column > lineEndPos-pos)){ // go *only* to the end of the current line pos = lineEndPos; } else{ // act as usual pos += column } setSelectionRange(input, pos,pos); }
相关文章:
- 当选择值x时,Javascript需要在正确的位置显示文本区域,从而循环通过具有选择选项的表单
- 按下后退按钮时,如何保持可滚动区域的滚动位置
- JavaScript 在文本区域中的特定位置插入文本
- 在光标位置的文本区域中插入一个字符串,并进行一些更改
- text使用shift键和箭头键时的区域插入符号位置
- 使用jquery或JS查找文本区域内的所有单词位置
- 单击时获取文本区域中插入符号的位置
- 如何从内容可编辑区域获取光标位置之前的文本
- 如何在文本区域中获取最后一个单词的位置
- 获取图像可见区域状态,以在画布中将图像设置在先前拖动的位置
- 如果在 IE 中最后附加光标,则在光标位置的文本区域中插入文本
- 根据插入符号的位置从文本区域中提取整个单词
- 如何本地化节点.js应用程序,每个区域设置具有不同的单词位置,混合静态和动态本地化文本
- 如何使用Javascript获取文本区域内字符中的鼠标位置
- QML 鼠标在鼠标区域中的绝对位置
- 使用 JS/CSS 将<区域>转换为具有完全相同位置和形状的
- 是否可以在不轮询的情况下观看文本区域中的插入符号位置
- 网站 - 根据鼠标位置更改图像(2 个区域)
- 移动光标位置在带有滚动插件的文本区域上不起作用
- 文本区域中的插入符号位置和周围字符