range.setStartBefore和range.setEndAfter在Edge和IE11中无法在contenteditable

时间:2018-05-31 21:02:25

标签: javascript contenteditable rich-text-editor

虽然没有错误,Edge和IE11都支持range.setStartBeforerange.setEndAfter,但没有任何反应。我已经检查了每个属性,一切看起来都很合适,但突然显示/选择全范围不会发生。

这适用于Chrome,Firefox和Opera。

要进行交互,请在lorem ipsum文本的中间选择几个字符或单词。 Chrome,Firefox和Opera将选择剩下的lorem ipsum文本,就像它们应该的那样。 Edge和IE11什么都不做。

演示:https://codepen.io/anon/pen/OEVzoe

document.querySelector('div').addEventListener('mouseup', function() {
  var range = window.getSelection().getRangeAt(0);
  range.setStartBefore(range.startContainer.parentNode);
  range.setEndAfter(range.endContainer.parentNode);
});
<div contenteditable="true">
  <p>Hi</p>
  <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cum aspernatur veniam ut accusamus, ratione nemo veritatis itaque, quia esse in recusandae qui pariatur tenetur non optio odio quis fugiat minima.</p>
  <p>Bye</p>
</div>

1 个答案:

答案 0 :(得分:0)

Edge&amp; IE11没有在视觉上显示它,范围仍在被选中。您可以通过添加range.deleteContents();作为函数回调中的最后一行来看到。

然而,这意味着任何编辑行为(如富文本编辑)更改样式都只会使用视觉选择/突出显示的内容,即使实际范围不同! :/