JavaScript在光标之前获取单词
好的,我一直在网络上寻找解决方案,但我找不到,有没有办法在可编辑div中插入符号位置之前找到单词,有点像:JavaScript在光标之前获取单词,javascript,html,cursor,caret,Javascript,Html,Cursor,Caret,好的,我一直在网络上寻找解决方案,但我找不到,有没有办法在可编辑div中插入符号位置之前找到单词,有点像: This is some| demo texts 这应该返回单词“some”。。。我不知道这是否可行,我很高兴能得到任何帮助,谢谢:)。使用插入符号位置查找器方法,前提是这将满足您的需要 函数ReturnWord(文本,caretPos){ var index=text.indexOf(caretPos); var preText=text.substring(0,caretPos);
This is some| demo texts
这应该返回单词“some”。。。我不知道这是否可行,我很高兴能得到任何帮助,谢谢:)。使用插入符号位置查找器方法,前提是这将满足您的需要
函数ReturnWord(文本,caretPos){
var index=text.indexOf(caretPos);
var preText=text.substring(0,caretPos);
if(借口索引(“”>0){
var words=借口。拆分(“”);
返回单词[words.length-1];//返回最后一个单词
}
否则{
返回借口;
}
}
函数AlertPrevWord(){
var text=document.getElementById(“textArea”);
var caretPos=GetCaretPosition(文本)
var word=ReturnWord(text.value,caretPos);
if(word!=null){
警惕(word);
}
}
函数GetCaretPosition(ctrl){
var CaretPos=0;//IE支持
if(文档选择){
ctrl.focus();
var Sel=document.selection.createRange();
Sel.moveStart('character',-ctrl.value.length);
CaretPos=Sel.text.length;
}
//Firefox支持
else if(ctrl.selectionStart | | ctrl.selectionStart=='0')
CaretPos=ctrl.selectionStart;
返回(CaretPos);
}
这里是一个使用选择
和范围
对象的粗略方法
function getWord() {
var range = window.getSelection().getRangeAt(0);
if (range.collapsed) {
text = range.startContainer.textContent.substring(0, range.startOffset+1);
return text.split(/\b/g).pop();
}
return '';
}
您可以在此处看到它的作用:。
这在IE中不起作用。如果您需要IE支持,请查看Rangy库。我有过类似的功能,但在我的Chrome浏览器中没有选择。根据我在这里的另一个答案:-我相应地将其更改为:
function getLastWordBeforeCaret() {
const containerEl = document.getElementById('element-id');
let preceding = '';
let sel;
let range;
if (window.getSelection) {
sel = window.getSelection();
if (sel && sel.rangeCount > 0) {
range = sel.getRangeAt(0).cloneRange();
range.collapse(true);
range.setStart(containerEl, 0);
preceding = range.toString();
}
}
let queryMatch = preceding.match(/([^\s]+)$/i);
if (queryMatch) {
return queryMatch[1];
} else {
return '';
}
}
您有任何浏览器要求吗?人们也会想知道jquery是否合适。是的,使用你想要的所有web语言,最好是所有浏览器,但主要是firefox:)可以制作一个JSFIDLE吗?因为我不知道如何在文本区域中实现这一点……通过
OP表示插入符号位置,而不是源字符串中的实际垂直线字符。@Dmitry Pashkevich更新了我的答案这正是我想要的,但我无法在可编辑内容的div中实现这一点,我不确定为什么???如果将ctrl.value和text.value替换为ctrl.innerText&text.innerText,则我将.value
更改为.innerHTML
@Lenny,但这在IE中不起作用。我不知道Firefox的解决方案。div.selectionStart返回未定义的。这是一个很好的解决方案,但这将省略光标前的字符。将修复和后期编辑。