将光标移动到contentEditable DIV中的占位符元素

时间:2011-02-15 23:38:29

标签: javascript html5 selection contenteditable textrange

我有一个contentEditable DIV,当用户按下一个键时,底层代码将被处理并被更新的代码替换。唉,这会导致光标位置丢失。

但是,为了保留光标位置,我在处理开始之前成功地将<span id="placeholder"></span>插入DIV中的正确位置。这保留了光标的预期位置,但现在我似乎无法设置范围来选择它。

以下是我目前的情况:

function focusOnPlaceholder() {

    var placeholder = document.getElementById('placeholder');

    if( !placeholder ) return;

    var sel, range;

    if (window.getSelection && document.createRange) {                    
        range = document.createRange();
        range.selectNodeContents(placeholder);
        range.collapse(true);
        sel = window.getSelection();
        sel.removeAllRanges();
        sel.addRange(range);
    } else if (document.body.createTextRange) {
        range = document.body.createTextRange();
        range.moveToElementText(placeholder);
        range.select();
    }

}

任何帮助都将受到赞赏,跨浏览器的解决方案将是令人难以置信的:)

1 个答案:

答案 0 :(得分:4)

跨浏览器解决方案是使用我的Rangy库,特别是selection save/restore module,它使用类似的占位符技术并经过充分测试。但是,通过在占位符元素中放置一些内容(例如,HTML中的不间断空格(\u00A0&nbsp;),可以在不使用库的情况下修复此问题。您可能希望删除选择范围后,focusOnPlaceholder()中的占位符。