为了账号安全,请及时绑定邮箱和手机立即绑定

Firefox 在错误的位置显示插入符号?

Firefox 在错误的位置显示插入符号?

阿波罗的战车 2021-11-12 18:30:54
我正在制作一个编辑器,我有一个 DOM 结构,比如<div id="container" contenteditable=true>  <div id="one">Some fancy text</div>  <div id="two">Some other text</div>  <div id="three">and that's enough!</div></div>在此编辑器中,写入的文本位于 div 'container' 内,该 div 是一个内容可编辑的 div,然后分成几个内部 div,随着用户写入而变化。在我的结构中,以编程方式,在网页生命周期中,在“容器”中添加、删除和移动了许多 div,甚至更改了 id。我不需要在主 div(带有数字 id 的那些)内有额外的 div 块,所以我强制以编程方式在按下返回时添加一个 br,而不是像 firefox 那样在 div 中包装文本。由于 Firefox 中的问题,插入符号(光标)的行为非常奇怪,我无法解决该问题。问题似乎是众所周知的。Firefox 解决了在按下返回键时在文本周围放置额外 div 的问题。在我的情况下,避免这种情况,当您第一次在最后一个 div 的末尾按回车时,插入符号正确移动(如果您继续书写,它会在新行的正确位置写入),但显示在一个奇怪的位置,就像在上一行的开头一样。这只发生在最后一个 div 的最后。它也显示在此处,但建议的解决方案对我不起作用Firefox 设置了错误的插入符号位置 contentEditable 与 :before在这里你可以看到问题本身:window.addEventListener('keydown', function (event) {    if(event.keyCode === 13){    event.preventDefault(); // Ensure it is only this code that runs    console.log("+++ Pressed return and adding a br!");    addHtmlElementAtCursor('br');        return false;  }});function keyPress(event) {  }function addHtmlElementAtCursor(element) {  var sel, range, textNode;  if (window.getSelection) {      sel = window.getSelection();      if (sel.getRangeAt && sel.rangeCount) {          range = sel.getRangeAt(0);          range.deleteContents();          if (element==' ') {            textNode = document.createTextNode('\u00A0');          }else{            textNode = document.createElement(element);          }          range.insertNode(textNode);          // Move caret to the end of the newly inserted text node          range.setStartAfter(textNode, textNode.length);          range.setEndAfter(textNode, textNode.length);          sel.removeAllRanges();          sel.addRange(range);      }  } else if (document.selection && document.selection.createRange) {      range = document.selection.createRange();      range.pasteHTML(text);  }
查看完整描述

2 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

似乎在大多数情况下将这个 css 规则添加到“容器”中可以解决问题:

white-space: pre-wrap;


查看完整回答
反对 回复 2021-11-12
?
白衣非少年

TA贡献1155条经验 获得超0个赞

我相信这仍然是 Firefox 中的一个已知错误。请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=904846。尽管该错误是在 6 年前创建的,但它在 8 个月前以相同的“打开”状态进行了更新。我也希望这个开放的错误得到解决。


查看完整回答
反对 回复 2021-11-12
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信