如何在具有contentEditable属性的Div中将光标设置到特定位置?

3

假设有一个类似如下的可编辑 div:

<div contenteditable="true">Here is some text, hello world.</div>

我该如何将光标定位在第6个位置,在is的s右侧?

我一直在尝试使用:

savedRange = window.getSelection().getRangeAt(0);

然后像这样修改数值:

savedRange.startOffset = 6
savedRange.endOffset = 6

但这并没有更新保存的范围。

有什么方法可以让光标在div中?谢谢。

1个回答

4

这是第7个位置。无论如何,以下是方法,假设您将可编辑的<div>赋予id为“myDiv”。请注意,这在IE < 9中不起作用,因为它具有完全不同的范围和选择API。

if (window.getSelection) {
    var sel = window.getSelection();
    var textNode = document.getElementById("myDiv").firstChild;
    var range = document.createRange();
    range.setStart(textNode, 7);
    range.collapse(true);
    sel.removeAllRanges();
    sel.addRange(range);
}

谢谢,最终我需要让我的contenteditable具有<div contenteditable="true"><p>这里是一些文本,<span class="tagged">你好世界。</span></p></div>... 鉴于一个span,如何获取并将其设置为textNode? - AnApprentice
range.selectNodeContents(referenceToYourSpan)。除此之外,我建议阅读有关范围的内容。MDN(https://developer.mozilla.org/en/DOM/range)非常好。如果你感到勇敢,还有规范(http://www.w3.org/TR/domcore/#interface-range)。 - Tim Down
谢谢Tim,你所说的referenceToYourSpan是什么意思? - AnApprentice
1
@AnApprentice:一个指向<span>元素的变量。例如:var referenceToYourSpan = document.getElementById("myDiv").getElementsByTagName("span")[0]; - Tim Down

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接