0

因此,当用户双击 div 时,我想让它可编辑并将光标设置在他双击的位置。

html:

<div id="mydiv" class="cmydiv" ondblclick="fEdit(this, event)">haha brouhaha beeee lololol</div>

javascript:

function fEdit(elem, e) {
    elem.contentEditable = "true";
    var range;
    if (document.selection) {
        range = window.document.selection.createRange();
        range.expand("word");
        range.execCommand("unselect");
    } else {
        range = window.getSelection();
        if (range.rangeCount > 0) range.collapseToStart();
    }
    setTimeout(function() { elem.focus(); }, 10);
    //elem.focus();
}

正如你所看到的,我用 IE 的 setTimeout 调用 focus(),但是它仍然不起作用!在所有其他浏览器中,我可以看到现在可编辑的 div 内的光标,但不能在 IE 中(版本 8)。到底是怎么回事 ?

jsfiddle:http: //jsfiddle.net/QcKpr/12/

4

1 回答 1

1

这似乎可以做到这一点:

function fEdit(elem, e) {
    elem.contentEditable = "true";
    var range;
    if (document.selection) {
        range = window.document.selection.createRange();
        range.collapse();
        range.select();
    } else {
        range = window.getSelection();
        if (range.rangeCount > 0) range.collapseToStart();
    }
    setTimeout(function() { elem.focus(); }, 10);
    //elem.focus();
};

重要的一点是为 IE 调用 range.select()。range.collapse() 对其他浏览器执行与 range.collapseToStart() 相同的操作。range.execCommand("unselect") 不是你想要的。

更新了 jsFiddle:http: //jsfiddle.net/QcKpr/16/

于 2012-05-13T16:25:55.573 回答