如何解决获取文本区域内当前光标位置下的文本
有没有办法在textarea内的当前光标位置下获取字符串
例如 - 点击 [(<Waiter 1>,0)]
- 控制台应该是 lorem
基本上是这样的:
lorem
let a = previous space or line break from cursor position
let b = next space or line break from cursor position
console.log(text from a to b);
$('#ed').on('click',function(){
//let a = previous space or line break from cursor position
//let b = next space or line break from cursor position
//console.log(text from a to b);
});
#ed{
display:block;
width:100%;
padding:9px;
height:50vh;
}
解决方法
我能够使用 selectionStart
作为 键 来实现此操作的 值 textarea
。这样,当我们将其嵌入到 click
上的事件侦听器中时,它将返回 key
中文本字符串的 textarea
。我们创建了一个查找字母匹配的函数,如果我们在光标所在的键上匹配,然后我们向后迭代直到不再有字母,这给了我们单词的开头。然后我们向前重复直到没有匹配项,然后将 textArea.value[key]
的值推入一个数组,join
这个数组以创建组成该单词的字符串。
还需要一个条件来确保我们在字符串开始和结束的长度内,因为值将是 null
或 undefined
,因此抛出错误更少。
我使用了一个监听 click
的事件监听器。
const textArea = document.getElementById('textArea')
const display = document.getElementById('display')
const getSelectedText = () => {
let key = textArea.selectionStart;
const word = [];
const letters = /^[A-Za-z]+$/;
if (key < textArea.value.length && key > 0) {
while (textArea.value[key].match(letters)) {
key--
if (key < 1) {
while (textArea.value[key].match(letters)) {
word.push(textArea.value[key])
key++
}
} else if (textArea.value[key].match(letters) === null) {
key++
while (textArea.value[key].match(letters)) {
word.push(textArea.value[key]);
key++
}
}
}
}
return word.join('');
}
textArea.addEventListener('click',() => {
display.innerHTML = `<b>Your selected text is:</b> <i>${getSelectedText()}</i>`
})
<textarea id='textArea' rows="7" cols="50">Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</textarea>
<div id="display"></div>
你好,
var borderChars = [' ','\n','\r','\t']
$(function() {
$('textarea').on('click',function() {
var text = $(this).html();
var start = $(this)[0].selectionStart;
var end = $(this)[0].selectionEnd;
while (start > 0) {
if (borderChars.indexOf(text[start]) == -1) {
--start;
} else {
break;
}
}
++start;
while (end < text.length) {
if (borderChars.indexOf(text[end]) == -1) {
++end;
} else {
break;
}
}
var currentWord = text.substr(start,end - start);
console.log(currentWord);
});
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。