contenteditable 光标定位到最后

在Vue作项目时,作了一个div[contenteditable=true]的组件做为文本输入框vue

在非手动输入值后,光标会丢失,经测试如下这段代码可用,直接将光标定位到最后异步

function keepLastIndex(obj) {
        console.log(obj)
        console.log(window.getSelection)
        console.log(document.selection)
        if (window.getSelection) { //ie11 10 9 ff safari
            obj.focus(); //解决ff不获取焦点没法定位问题
            var range = window.getSelection(); //建立range
            range.selectAllChildren(obj); //range 选择obj下全部子内容
            range.collapseToEnd(); //光标移至最后
        } else if (document.selection) { //ie10 9 8 7 6 5
            var range = document.selection.createRange(); //建立选择对象
            //var range = document.body.createTextRange();
            range.moveToElementText(obj); //range定位到obj
            range.collapse(false); //光标移至最后
            range.select();
        }
    }
---------------------

在实际使用时,vue.$emit是一个异步函数,最好在调用这个定位前加上必定的延迟,经测试,5ms就能够了函数

setTimeout(()=>{
    keepLastIndex(e.target)
},5)

原文:http://www.javashuo.com/article/p-uvhgwkun-go.html测试

相关文章
相关标签/搜索