JavaScript-文本框-根据光标/突出显示的位置从字符串/文本框中删除字符

JavaScript-文本框-根据光标/突出显示的位置从字符串/文本框中删除字符,javascript,string,input,Javascript,String,Input,所以我创建了一个密码表只是为了练习。我有一个文本框,用户将在其中输入密码进行检查。它会在您键入时自动更新,因此不需要键入密码并按下按钮 这就引出了我的问题。如果用户按下backspace按钮,它将从字符串的末尾分割一个字符,问题是,如果光标移动到密码的中间,并且删除了一个字符,它仍然只从字符串的末尾而不是光标的位置分割一个字符。如果高亮显示并删除部分或全部密码,则会发生相同的情况,它只会删除结束字符 现在我可以清楚地看到代码中的问题所在,因为它目前只使用pass.slice(0,-1),这当然会

所以我创建了一个密码表只是为了练习。我有一个文本框,用户将在其中输入密码进行检查。它会在您键入时自动更新,因此不需要键入密码并按下按钮

这就引出了我的问题。如果用户按下backspace按钮,它将从字符串的末尾分割一个字符,问题是,如果光标移动到密码的中间,并且删除了一个字符,它仍然只从字符串的末尾而不是光标的位置分割一个字符。如果高亮显示并删除部分或全部密码,则会发生相同的情况,它只会删除结束字符

现在我可以清楚地看到代码中的问题所在,因为它目前只使用pass.slice(0,-1),这当然会删除最后一个字符

我的问题是…是否有一种功能或技术可以让我根据光标的位置/如果用户高亮显示和删除,来删除字符

我猜一些psuedo代码应该是

if (keycode == 8) {
  pass.slice(0,cursorposition -1);
}
下面是我目前正在使用的相关代码

passDOM.addEventListener('keydown', function(e) { 
    strengthInit(e); //pass the event to the initiation class
});

function strengthInit(eKey) {

     if (eKey.keyCode == 8) { //user pressed the backspace button
            if (pass.length == 1) { //check to see if user deleted the password
                pass = "";
                document.getElementById("resultContainer").remove(); //remove the results 
            } else {
                pass = pass.slice(0, -1); //remove a character
                finalScore = PasswordSecurity(pass); //run through the checker
            }
    } else if (eKey.keyCode == 46 ) {  //Delete key was pressed  
    //TODO: determine the lcoation of the cursor and delete one before or after

   } else { //user has entered a new character, append to the end of the string
       pass += eKey.key
       finalScore = PasswordSecurity(pass); //run through the checker
   }
}

好的,我使用selectionStart和selectionEnd实现了它

我不知道是否有更有效的方法


if (passDOM.selectionStart == passDOM.selectionEnd) { //only deleting one character
        pass = pass.replace(pass[passDOM.selectionEnd -1], "");
} else { //deleting a selection
        var result = pass.substring(passDOM.selectionStart, passDOM.selectionEnd);
        pass = pass.replace(result,"");
        finalScore = PasswordSecurity(pass);
}