在元素后设置光标

时间:2016-12-10 14:23:35

标签: javascript cursor contenteditable

我有这段代码

elementSpan = document.createElement('span').className = 'mainSpan';
elementSpan.innerHTML = '<span class="childSpan">A</sapn>';
range.insertNode(elementSpan);
range.setStartAfter(elementSpan);  //the problem am having

现在我将光标设置为elementSpan之后将其插入到一个可信的div中,而不是将光标放在elementSpan之后,它在文本A之后。在<span class="childSpan">内,但我希望它在elementSpan之后。请有任何人知道如何做到这一点?

1 个答案:

答案 0 :(得分:2)

再次回答你的问题,这是我能够接近工作的最接近的问题。这会在末尾创建一个带有a的虚拟&nbsp;,并将光标移过它。 a&nbsp;都很重要,因为没有这些浏览器( Safari,Chrome )会强制输入的文本由于某些优化而进入最后一个元素。代码将光标移动到下一个元素(如果已存在),可以通过删除if来删除它。

我不是范围/选择API的专家。期待看到其他有趣的答案。

elementSpan = document.createElement('span');
elementSpan.className = 'mainSpan';
document.getElementById('ce').appendChild(elementSpan);
elementSpan.innerHTML = '<span id="childSpan">Another text</span>'; //the problem am having
setCursorAfterElement(document.getElementById('childSpan'));

function setCursorAfterElement(ele) {
  if (!ele.nextElementSibling) {
    var dummyElement = document.createElement('a')
    dummyElement.appendChild(document.createTextNode('\u00A0'))
    ele.parentNode.appendChild(dummyElement)
  }
  var nextElement = ele.nextElementSibling
  nextElement.tabIndex=0
  nextElement.focus()
  var r = document.createRange();
  r.setStart(nextElement.childNodes[0], 1);
  r.setEnd(nextElement.childNodes[0], 1);

  var s = window.getSelection();
  s.removeAllRanges();
  s.addRange(r);
  //document.execCommand("delete", false, null);
}
#childSpan {
  border: 1px solid red;
  margin: 0px;
}
<div id="ce" contenteditable="true">
</div>