Javascript 在文本开始或结束时,使用键盘箭头导航到下一个文本元素

Javascript 在文本开始或结束时,使用键盘箭头导航到下一个文本元素,javascript,jquery,html,Javascript,Jquery,Html,我很难使用键盘箭头从一个元素导航到另一个元素;我希望仅当光标位于文本的开头或结尾时才进行导航,即“仅当光标位于文本的结尾时才向右移动,仅当光标位于文本的开头时才向左移动,例如,当光标位于不希望导航的文本的结尾时,我按下向左箭头,我只想让默认事件发生。” 这是我想要的开始, 这是我需要帮助编写的函数 function isEndOrStartOfText($this) { return true; // @todo calculate here } 您希望分隔这两个检查,因

我很难使用键盘箭头从一个元素导航到另一个元素;我希望仅当光标位于文本的开头或结尾时才进行导航,即“仅当光标位于文本的结尾时才向右移动,仅当光标位于文本的开头时才向左移动,例如,当光标位于不希望导航的文本的结尾时,我按下向左箭头,我只想让默认事件发生。”

这是我想要的开始,

这是我需要帮助编写的函数

function isEndOrStartOfText($this)
{
    return true;
    // @todo calculate here
}  

您希望分隔这两个检查,因为您可以位于字符串的末尾并按left键,它不应该聚焦上一个字段

在现代浏览器中,您可以在节点上获取node.selectionStart,然后按左键检查选择开始是否为0:

if ($this[0].selectionStart === 0) {
    e.preventDefault();
    if ($('#'+previous_id).length > 0) {
        $('#'+previous_id).focus();
    }
}
对于右键,您可以执行以下检查:

if ($this[0].selectionStart === $this.val().length) {
    e.preventDefault();
    if ($('#'+next_id).length > 0) {
        $('#'+next_id).focus();
    }
}
我更新了您的示例:(在Chrome中测试)

PS:此代码在IE上不起作用,stackOverflow上有一个polyfill可用,只需搜索“如何在textarea中获得插入符号位置?”

使用RGraham建议的方法,我对代码进行了一些修改,以获得


此答案包含有关如何在文本字段中获取当前光标位置的信息-
function getCursorPosition(jqueryItem) {
   var input = jqueryItem.get(0);
   if (!input) return; // No (input) element found
   if ('selectionStart' in input) {
    // Standard-compliant browsers
    return input.selectionStart;
   } else if (document.selection) {
    // IE
    input.focus();
    var sel = document.selection.createRange();
    var selLen = document.selection.createRange().text.length;
    sel.moveStart('character', -input.value.length);
    $("#sel").html(sel);
    $("#selLen").html(selLen);
    return sel.text.length - selLen;
   }
}