You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome在contenteditable="plaintext-only"模式下按回车插入双换行及删除异常的问题咨询

Chrome在contenteditable="plaintext-only"模式下按回车插入双换行及删除异常的问题咨询

我现在在做一个混合模式的文本框:用户可以通过脚本插入富文本结构化项,其余时候就是普通纯文本输入。我本来觉得contenteditable="plaintext-only"刚好能匹配需求,大部分场景运行都正常,但遇到了一个棘手的问题:当光标放在两个结构化元素之间按回车时,就会出现异常行为,具体可以看下面的代码片段:

相关代码

CSS 样式

.semiStructuredInputStructuredItem {
    :after {
        content: " "
    }

    user-select: all;
}

HTML 结构

<div contenteditable="plaintext-only" style="/* white-space: pre; */">
    <div class="semiStructuredInputStructuredItem" data-semi-structured-index="0" contenteditable="false" style="display: inline-block; margin-left: 2px; margin-right: 2px;">
        <div style="background: rgb(235, 244, 245); padding: 2px;">Developer, Test (Mr)</div>
    </div>
    <div class="semiStructuredInputStructuredItem" data-semi-structured-index="1" contenteditable="false" style="display: inline-block; margin-left: 2px; margin-right: 2px;">
        <div style="background: rgb(235, 244, 245); padding: 2px;">Demo, (Dr)</div>
    </div>
    <br>
</div>

具体异常问题

  • 第一个问题:Chrome中按下回车时,会插入两个换行而不是预期的一个,而且第二个结构化元素会被挤到下一行。这不是单纯的视觉问题——Chrome实际会在文本框的内容中生成两个真实的换行符
  • 第二个问题:出现双换行后按删除键,第二个换行被删掉的同时,后面的结构化元素也会被一并删除,但我预期应该只删除换行本身,不会影响到后面的结构化项

我之前了解过white-space属性和这个场景的关联,也尝试过修改这个属性的不同值,但都没有改善问题。想问问有没有办法让这个交互逻辑变得更合理?我想要的理想效果是:

  1. 用户按回车时,只插入一个换行符
  2. 删除这个换行符时,仅移除换行,不会误删后面的结构化元素

备注:内容来源于stack exchange,提问作者Mark Boyall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:35:30