我正在创建我自己的聊天应用程序,其中我使用了内容可编辑的div
作为聊天框。我正在实现提及功能,其中我的提及是用户名 Package 在一个span标签中,后跟一个空格(
),但我的问题是,当我删除空格时,我的光标移动到div的末尾。
有间隔
<html>
<head>
</head>
<body>
<div contenteditable=true><span contenteditable='false'>UserName</span> </div>
</body>
</html>
无空位
<html>
<head>
</head>
<body>
<div contenteditable=true><span contenteditable='false'>UserName</span></div>
</body>
</html>
这就是我如何在代码中实现的,而且这个bug只发生在chrome中。
5条答案
按热度按时间7gyucuyw1#
这实际上是 * 浏览器中的一个bug *,我有一个变通方法,但我不知道它会对您有多大帮助,但这是我们目前所能做的最好的。
没有空间
一个二个一个一个
如果您希望有***完整校样内容***,下面是
script
结合: before
伪内容的解决方案:这里我取了
: before
伪元素的宽度,并将其阴影化到div
元素padding-left
上。我使用脚本时牢记了动态用户名。希望这对你有帮助。
bis0qfac2#
分析
想象一个简单的文本编辑器(记事本),您在其中键入了三个字符-
TRY
现在,很明显,光标只能放在这里的4个地方,它们是:
原因很简单,因为这3个字符是此处仅有的可编辑的字符,并且它们是3个单独的实体,无法进一步编辑/分隔。例如,我们无法将光标放在字母"T"之间并将
┐
和┌
与它分隔开。您的场景也是如此,因为
被清除后,光标会移动到div的末尾,因为contenteditable=true
被设置为<div>
,而false
被设置为<span>
。因此,div
是此处唯一可编辑的元素,而span
不是。因此,光标只能将自己定位在可编辑位置,即位于可编辑元素的开头(在本例中为div
)或结尾,并且在两者之间为而不是。由于
div
是一个块元素,当块元素占据其父元素的整个宽度时,光标移动到页面的末尾。如果将width: 50%;
设置为div
,我们可以看到光标移动到页面的中间。溶液
考虑到您对其他答案的评论,您需要保持宽度为
100%
,解决方案是用另一个也具有属性contenteditable=true
的div
Packagediv
,并将子div
保持为inline-block
元素。CODEPEN
解释
这里,
div
的父元素和子元素都是可编辑的,父元素占全角(100%),子元素是inline-block
元素,只占其内容的空间,因此,一旦
被清除,光标就会移动到下一个可编辑内容的末尾,即子元素div
。请注意,您需要将子
div
和span
以及
保留在代码中的同一行中,否则将在部分中创建额外的字符(空格),这将进一步破坏contenteditable
。希望这个有用。
oxalkeyp3#
这可以帮助您
vjrehmav4#
信不信由你,这个bug与实际HTML标记本身中的空格有关。
下面是一个工作示例:
通过简单地将结束div移到下一行,我们就可以将break传递给html解析器。
alen0pnh5#
一个简单的修复方法是在contenteditable块中添加
<br>
。