在.replace()之后恢复光标位置
Restore cursor position after .replace()
我最大的问题是,在它被替换后,光标默认位于文本区域的末尾。如果我在打字,这没有问题,但如果我回去编辑,这真的很烦人。这是我尝试的(textarea的id是"area")
var el = e.area;
position = el.selectionStart; // Capture initial position
el.value = el.value.replace(''u0418'u0410', ''u042F');
el.selectionEnd = position; // Set the cursor back to the initial position.
您可以尝试下面的代码片段。在当前的形式中,它将==
替换为+
,但它允许将任何字符串替换为另一个字符串,或短或长。
为了保持光标的位置,你必须保存和恢复selectionStart
和selectionEnd
。计算偏移量以解释两个字符串之间的长度差异,以及在游标之前出现的次数。
使用setTimeout
确保在进行处理之前将新键入的字符插入文本中。
var area = document.getElementById("area");
var getCount = function (str, search) {
return str.split(search).length - 1;
};
var replaceText = function (search, replaceWith) {
if (area.value.indexOf(search) >= 0) {
var start = area.selectionStart;
var end = area.selectionEnd;
var textBefore = area.value.substr(0, end);
var lengthDiff = (replaceWith.length - search.length) * getCount(textBefore, search);
area.value = area.value.replace(search, replaceWith);
area.selectionStart = start + lengthDiff;
area.selectionEnd = end + lengthDiff;
}
};
area.addEventListener("keypress", function (e) {
setTimeout(function () {
replaceText("==", "+");
}, 0)
});
<textarea id="area" cols="40" rows="8"></textarea>
相关文章:
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 如何临时暂停浏览器渲染,然后恢复整个页面
- 自定义函数中的光标位置
- NodeJS-readline暂停和恢复事件发射器(逐行读取)
- 谷歌地图劫持了iphone's滚动(触摸事件)-如何恢复
- 在Widget代码中使用javascript从左向右滑动光标图像
- 我希望在不替换现有变量的情况下恢复localStorage中的变量
- 将文本插入光标所在的文本区域
- 克隆和恢复”;工具化的“;元素
- 鼠标光标-用于wordpress网站
- 如何暂停和恢复jquery间隔
- 在Widget代码中没有jQuery的情况下,用光标图像从左滑动到右
- 我可以让我的Ajax调用引起一个“;进行中”;光标
- 默认光标在IE和Mozilla中不起作用
- onmousedown更改光标;可能需要控制事件冒泡
- 由于滑块的原因,光标始终是D3中的十字光标
- 即使光标位于屏幕边缘,也可以跟踪鼠标速度
- 在python中,我如何才能恢复被隐藏的元素的内容
- 在.replace()之后恢复光标位置
- 如何保存/恢复或维护NicEdit RTE中的光标位置