placeCaretAtEnd似乎无法在Firefox中运行

时间:2014-10-06 16:05:23

标签: javascript

我有一个内容可编辑的DIV,其中包含一个带有文本的P标记,并使用placeCaretAtEnd将插入符号放在P标记内容的末尾。除Firefox(v32.0.3)外,这似乎适用于所有浏览器。就此而言,插入符号似乎消失了。

据我所知,placeCaretAtEnd JS函数应该与Firefox完全兼容。知道为什么在这种情况下这不起作用吗?

工作示例:http://jsfiddle.net/0ktff3zj/1/

<input id=button type=button value="Caret to end">
<div contenteditable=true>
    <p id="paragraph">Sample text. Sample text.</p>
</div>

<script>
$('#button').bind('click', function() {
    placeCaretAtEnd(document.getElementById('paragraph'))
});

function placeCaretAtEnd(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>

1 个答案:

答案 0 :(得分:1)

我通过将光标放在contenteditable div中然后使用placeCaratAtEnd函数来移动它来解决这个问题。

首先我给了div一个id,所以不会混淆。

$('#button').bind('click', function() {
    $('div#id').focus();
    placeCaretAtEnd(document.getElementById('paragraph'))
});

我永远搜索,虽然我知道这有点像黑客一面,但这是一个解决方案。