JavaScript在光标前获取单词

Len*_*ase 16 html javascript cursor caret

好吧,我一直在网上寻找一个解决方案,但我找不到一个,有没有办法在可编辑div中的插入位置之前得到这个词,所以有点像:

This is some| demo texts
Run Code Online (Sandbox Code Playgroud)

这应该返回"some"这个词......我不知道这是否可能,我会很高兴得到任何帮助,谢谢:).

Özg*_*lan 20

使用此处提供的Caret Position finder方法,您可以按照自己的意愿行事.

function ReturnWord(text, caretPos) {
    var index = text.indexOf(caretPos);
    var preText = text.substring(0, caretPos);
    if (preText.indexOf(" ") > 0) {
        var words = preText.split(" ");
        return words[words.length - 1]; //return last word
    }
    else {
        return preText;
    }
}

function AlertPrevWord() {
    var text = document.getElementById("textArea");
    var caretPos = GetCaretPosition(text)
    var word = ReturnWord(text.value, caretPos);
    if (word != null) {
        alert(word);
    }

}

function GetCaretPosition(ctrl) {
    var CaretPos = 0;   // IE Support
    if (document.selection) {
        ctrl.focus();
        var Sel = document.selection.createRange();
        Sel.moveStart('character', -ctrl.value.length);
        CaretPos = Sel.text.length;
    }
    // Firefox support
    else if (ctrl.selectionStart || ctrl.selectionStart == '0')
        CaretPos = ctrl.selectionStart;
    return (CaretPos);
}
Run Code Online (Sandbox Code Playgroud)
<input id="textArea" type="text" />
<br />
<input id="Submit" type="submit" value="Test" onclick="AlertPrevWord()" />
Run Code Online (Sandbox Code Playgroud)

这里也是一个jsfiddle.


Hem*_*ock 9

这是使用SelectionRange对象的粗略方法.

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 '';
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到它:http://jsfiddle.net/ggfFw/1/.这在IE中不起作用.如果您需要IE支持,请查看Rangy库.