【发布时间】:2015-03-17 18:21:02
【问题描述】:
我说的是 contenteditable div 内部的内容,目标是同一个 contenteditable div。因此不涉及外部程序。
这个 div 中的 HTML 结构是每个单词都在一个 span 内,其中包含我们需要跟踪的一些数据。然后空格作为跨度之间的文本节点留下。这在大多数情况下都可以正常工作(拧你换行),但我在复制和粘贴时遇到了一个奇怪的问题。
Chrome 变成了这个
<span attrs="stuff">word</span> <span attrs="stuff">another</span>
进入这个:
<span attrs="stuff">word </span><span attrs="stuff">another</span>
或者这个:
<span attrs="stuff">word</span><span style="line-height: 16.79999"> </span><span attrs="stuff">another</span>
这显然意味着如果用户复制和粘贴超过一行,那么格式就完全搞砸了,跨度的内容发生了变化,这使我们需要跟踪的数据无效。
核心问题是 div 中的其他内容可能出于真实原因包含不间断空格,因此如果我全局开始将它们换出,那么我可能会破坏它。
对于我的跨度和我的 attrs,我知道其中应该包含什么,因此很容易去除不间断的空格并将其恢复到应有的状态。但是对于这些奇怪的线高的跨度,我不知道如何在不破坏所有内容的情况下清除它们。
现在,我已经删除了所有仅包含不间断空格的插入跨度。但我真正想要的是要么首先阻止 Chrome 这样做,要么是一种明确的方法来识别有问题的额外跨度,以便我可以安全地清理它们,而不会破坏任何出于真实原因而存在的类似跨度。我想我可以使用这个奇怪的 line-height,但感觉很脆弱且不安全。
如何防止跨度出现或明确识别它们?
【问题讨论】:
-
您有可以发布的示例吗?我不太明白你想做什么。您是否在解析 contenteditable div 并使用 标签包装单词?
-
html encode/decode 能解决你的问题吗
-
@Yoink:不,我是通过 JS 将内容插入到 div 中。然后用户复制并粘贴它。这是一个富文本框,所以它可能包含很多奇怪的东西,用户也可以尝试复制和粘贴,所以我无法对传入的内容做出假设,除非它被明确标记为我的。
标签: javascript html google-chrome