如何在c:\program files\pa.txt exists in list_1
c:\program files\pex2.txt exists in list_1
div中检测光标前的单词并将其替换为其他内容?此http://rextester.com/QBQDO38144但不适用于此可信任的div:
contenteditable
document.getElementById('a').addEventListener('keydown', e => {
if (e.which == 9) {
e.preventDefault();
let endingIndex = e.target.selectionStart; // does not work for contenteditable
let startingIndex = endingIndex && endingIndex - 1;
let value = e.target.innerHTML;
let regex = /[ ]/;
while(startingIndex){
if(regex.test(value[startingIndex])){
++startingIndex;
break;
}
--startingIndex;
}
console.log('word before cursor: ' + value.substring(startingIndex, endingIndex));
}
});
答案 0 :(得分:1)
这是因为selectionStart
仅适用于HTMLInputElement
类型的Objsects。
也许您想查看此gist或直接使用Range
界面。
答案 1 :(得分:1)
使用AntonGuz提供的gist答案,这适用于满意的div
和textarea
:
function getPos(elt) {
if (elt.isContentEditable) { // for contenteditable
elt.focus();
let _range = document.getSelection().getRangeAt(0);
let range = _range.cloneRange();
range.selectNodeContents(elt);
range.setEnd(_range.endContainer, _range.endOffset)
return range.toString().length;
} else { // for texterea/input element
return elt.selectionStart;
}
}
function setPos(elt, pos) {
if (elt.isContentEditable) { // for contenteditable
elt.target.focus();
document.getSelection().collapse(elt.target, pos);
} else { // for texterea/input element
elt.target.setSelectionRange(pos, pos);
}
}
function insertText(content) {
document.execCommand('insertText', false, content)
}
document.addEventListener("keydown", function(e) {
if (e.target.tagName.toLowerCase() === 'textarea' || e.target.isContentEditable)
{
if (e.keyCode == 9) {
e.preventDefault();
console.log(getPos(e.target));
let endingIndex = getPos(e.target);
let startingIndex = endingIndex && endingIndex - 1;
let value = e.target.isContentEditable ? e.target.innerHTML : e.target.value;
let regex = /[ ]/;
while (startingIndex) {
if (regex.test(value[startingIndex])) {
++startingIndex;
break;
}
--startingIndex;
}
console.log('word before cursor: ' + value.substring(startingIndex, endingIndex));
}
}
});

<div contenteditable>Please click here and hit TAB, the word before cursor should be replaced by something else.</div>
<textarea></textarea>
&#13;