感谢this question和Tim Down发布的答案,我做了一个函数,在“可信任的”div中得到插入符号。
这是一个fiddle,这是函数:
function getWordPrecedingCaret (containerEl) {
var preceding = "",
sel,
range,
precedingRange;
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount > 0) {
range = sel.getRangeAt(0).cloneRange();
range.collapse(true);
range.setStart(containerEl, 0);
preceding = range.toString();
}
} else if ((sel = document.selection) && sel.type != "Control") {
range = sel.createRange();
precedingRange = range.duplicate();
precedingRange.moveToElementText(containerEl);
precedingRange.setEndPoint("EndToStart", range);
preceding = precedingRange.text;
}
var lastWord = preceding.match(/(?:\s|^)([\S]+)$/i);
if (lastWord) {
return lastWord;
} else {
return false;
}
}
我的问题:一旦得到最后一个字,我怎么能从div中删除它?请注意,我不想删除div中出现的任何单词,只发生在插入符号之前。
提前谢谢!
答案 0 :(得分:0)
您可以尝试使用match()
index
属性
var lastWordPosition = preceding.match(/(?:\s|^)([\S]+)$/i).index;
然后你可以做substring(0, lastWordPosition)
或任何你想要的......
答案 1 :(得分:0)
一个很好的解决方案,可以在插入符号前显示单词
export function getWordBeforeCare() {
const range = window.getSelection().getRangeAt(0);
if (range.collapsed) {
const text = range.startContainer.textContent.substring(
0,
range.startOffset + 1
);
return (
text
.split(/\s/g) // if you want the last word until the space
// .split(/\b/g) //if you want the last word until a non caractere
.pop()
.trim()
);
}
return "";
}