聚焦并将光标放在contenteditable div的末尾

时间:2017-05-01 20:55:36

标签: jquery

我有JSFiddle,我尝试实现this post中描述的内容。然而,令人惊讶的是我的代码无法工作,我无法弄清楚原因。

以防万一,我在stackoverflow中放置相同的代码。



$(document).ready(function(){
 focusAndPlaceCaretAtEnd($('#test'));
});
function focusAndPlaceCaretAtEnd(el) {
    el.focus();
    if (typeof window.getSelection != "undefined"
            && typeof document.createRange != "undefined") {
        var range = document.createRange();
        range.selectNodeContents(el);
        range.collapse(false);
        var sel = window.getSelection();
        sel.removeAllRanges();
        sel.addRange(range);
    } else if (typeof document.body.createTextRange != "undefined") {
        var textRange = document.body.createTextRange();
        textRange.moveToElementText(el);
        textRange.collapse(false);
        textRange.select();
    }
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test" contenteditable="true" placeholder="">
   Focus and place the cursor to the end
</div>
&#13;
&#13;
&#13;

最有可能的是,我的代码中存在一些愚蠢的错误。任何人都可以保存我的大脑提供暗示吗?

1 个答案:

答案 0 :(得分:1)

而不是传入jquery对象,传入一个节点ref。

IE。

$(document).ready(function(){
 var node = document.getElementById('test');
 focusAndPlaceCaretAtEnd(node);
});

那些范围函数显然不够智能,无法确定它们何时被传递给jquery对象。

http://jsfiddle.net/g9Lxkvbb/1/