在range.setStart之后,新字符出现在上一个节点中

时间:2018-12-12 16:41:06

标签: javascript google-chrome range selection

这发生在Chrome中(在Windows上为71.0.3578.80):

在range.setStart上,插入符号移动到参考节点,但是在键入新字符之后,偏移量为0时,该节点之前才出现在该节点中。

预期的行为是,字符出现在range.setStart的引用节点中。

请参阅此处:

http://jsfiddle.net/pgrds9qv/

function setCaret() {
  var el = document.getElementById("editable");
  var range = document.createRange();
  var sel = window.getSelection();
  range.setStart(el.childNodes[2], 0);
  range.collapse(true);
  sel.removeAllRanges();
  sel.addRange(range);
}
div {
  padding: 10px;
}

span {
  border: 1px solid black;
  font-size: 120%;
  padding: 5px;
}
<div id="editable" contenteditable="true">
  <span>first </span><span>second </span><span>third </span>
</div>
<div>
  <button id="button" onclick="setCaret()">focus</button>
</div>

在Firefox中可以正常工作。 如何在Chrome中获得相同的行为? 还是有其他方法可以实现这一目标? 非常感谢您的任何提示!

0 个答案:

没有答案