当用户单击按钮(在光标位置)时,在输入字段中添加一个文本字符串
Add a string of text into an input field when user clicks a button (At Cursor Location)
我在这里找到了我需要的大部分解决方案:
当用户点击按钮时,在输入字段中添加一个文本字符串
问题是我需要在光标位置的文本区域框中添加文本——该页面上的解决方案将文本字符串添加到文本区域框内容的末尾。
这是我的HTML:
<textarea style="width:500px; height: 150px;" id="text">This is some text</textarea>
这是我的Javascript:
$(function () {
$('#button').on('click', function () {
var text = $('#text');
text.val(text.val() + "'n'nafter clicking");
});
$('#button2').on('click', function () {
var text = $('#text');
text.val(text.val() + "'n'nafter clicking 2");
}); });
以下是我的JS对到目前为止一切工作的处理:
https://jsfiddle.net/2m8L3y3n/
我基本上希望插入的文本不仅在底部,而且在文本区域框中光标所在的位置。。。
此外,如果我在一个页面上有多个文本区域框,如何让按钮绑定到特定的文本区域框?在我的JS fiddle上,我有两个框,但只有第一个有效——有没有办法做到这一点,这样我就不必为每个框都有一个新的javascript代码?我可能在一个页面上有大约10个文本区域框,每个框都有自己的一组按钮,所以我试图保持代码的可管理性。
非常感谢您的帮助!
我已经编写了一个如何实现这一点的示例函数。
https://jsfiddle.net/axcufrd0/2/
function insertText(text)
{
var $textbox = $("#text");
var textStr = $textbox.text();
var startPos = $textbox[0].selectionStart;
var endPos = $textbox[0].selectionEnd;
// If set to true, the selection will NOT be replaced.
// Instead, the text will be inserted before the first highlighted character.
if (false)
{
endPost = startPos;
}
var beforeStr = textStr.substr(0, startPos);
var afterStr = textStr.substr(endPos, textStr.length);
textStr = beforeStr + text + afterStr;
$textbox.text(textStr);
return textStr;
}
这样,我们希望将文本拆分,然后将其与新内容连接起来。根据您的操作方式,您可能希望替换选择文本,或者直接在前面或后面追加。
对于这段代码,我没有花时间解决的一个警告是,默认情况下,选择文本是0到0。这意味着没有任何选择将文本附加到文本框的最前面。
您需要获取光标位置(索引),并使用子字符串拆分文本区域文本,并将字符串连接在一起以获得新文本:
有关获取光标位置的详细信息,请参阅此答案。
$(function () {
$.fn.getCursorPosition = function() {
var el = $(this).get(0);
var pos = 0;
if('selectionStart' in el) {
pos = el.selectionStart;
} else if('selection' in document) {
el.focus();
var Sel = document.selection.createRange();
var SelLength = document.selection.createRange().text.length;
Sel.moveStart('character', -el.value.length);
pos = Sel.text.length - SelLength;
}
return pos;
};
$('#button').on('click', function () {
var text = $('#text');
var cursorLocation = text.getCursorPosition();
var originalText = text.val();
var newText = originalText.substring(0, cursorLocation) + 'after clicking' + originalText.substring(cursorLocation);
text.val(newText);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea style="width:500px; height: 150px;" id="text">This is some text</textarea>
<button id="button">Click Me</button>
您可以尝试一下----------------
function insertAtCaret(areaId, text) {
var txtarea = document.getElementById(areaId);
var scrollPos = txtarea.scrollTop;
var strPos = 0;
var br = ((txtarea.selectionStart || txtarea.selectionStart == '0') ?
"ff" : (document.selection ? "ie" : false));
if (br == "ie") {
txtarea.focus();
var range = document.selection.createRange();
range.moveStart('character', -txtarea.value.length);
strPos = range.text.length;
}
else if (br == "ff")
strPos = txtarea.selectionStart;
var front = (txtarea.value).substring(0, strPos);
var back = (txtarea.value).substring(strPos, txtarea.value.length);
txtarea.value = front + text + back;
strPos = strPos + text.length;
if (br == "ie") {
txtarea.focus();
var range = document.selection.createRange();
range.moveStart('character', -txtarea.value.length);
range.moveStart('character', strPos);
range.moveEnd('character', 0);
range.select();
}
else if (br == "ff") {
txtarea.selectionStart = strPos;
txtarea.selectionEnd = strPos;
txtarea.focus();
}
txtarea.scrollTop = scrollPos;
}
<textarea style="width:500px; height: 150px;" id="text"></textarea>
<br />
<input type="button" onclick="insertAtCaret('text', ' text to insert')" value="Click Me to add Text" id="button" />
<input type="button" onclick="insertAtCaret('text', ' Hello Man')" value="Click Me to add Text" id="button" />
引用
代码:获取光标当前位置的功能
function getCaret(el) {
if (el.selectionStart) {
return el.selectionStart;
} else if (document.selection) {
el.focus();
var r = document.selection.createRange();
if (r == null) {
return 0;
}
var re = el.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
return 0;
}
点击按钮2:
$('#button2').on('click', function() {
var text = document.getElementById('text');
var position = getCaret(text);
console.log(position);
console.log(text);
//text.val(text.val() + "'n'nafter clicking 2");
var currentPos = getCaret(text);
//alert(currentPos);
var strLeft = text.value.substring(0, currentPos);
var strMiddle = "String to add";
var strRight = text.value.substring(currentPos, text.value.length);
text.value = strLeft + strMiddle + strRight;
});
如果有什么不清楚的地方,请告诉我。
相关文章:
- 将字符串添加到页面url
- 如何将静态字符串添加到受信任的 ng-src
- 在这种情况下,如何将字符串添加到函数中 php
- 将字符串添加到短语 Javascript
- 将字符串添加到不区分大小写的 RegExp 中替换的事物开始
- 如何向变量字符串添加更多值
- 将查询字符串添加到当前URL中嵌入的查询的锚链接
- 使用JQuery将字符串添加到内联CSS中
- 在Javascript中作为字符串添加的整数
- JavaScript将字符串添加到数字而不是值
- 如何在javascript或jquery中为字符串添加一些数字
- 将字符串添加到吞咽流的开头
- 是否可以在正则表达式中向现有字符串添加新字符串
- 将字符串添加到 JavaScript 数组
- 使用 Javascript 通过表单将预定义的字符串添加到用户输入中
- EmberJs 将函数的返回字符串添加为类名
- 如何向字符串添加连字符(将其格式化为 16 位序列号)
- 如何仅在 Jquery/Javascript 中尚不存在时才将字符串添加到数组中
- 在 cordova 提示符下将子字符串添加到 results.input1
- 向 html 字符串添加粗体标记