HTML内容不可编辑的岛屿

我有一种基于浏览器的WYSIWYG编辑器,用户可以在其中编辑文档模板。

文档模板是一个普通的html与一些特殊的“合并代码占位符”。这样的模板通过从DB中获取的数据替换这些占位符来“实例化”。这给出最终文档 – 模板的一个实例。

我目前的方法看起来像这样:

<div contenteditable>
  Sample template with <input type=button class="mergecode" value="MergeCode1">.
</div>

(在线样本玩:http://jsfiddle.net/tFBKN/)

在这种情况下,输入不可编辑,并且表现为实体块 – 正是我需要的。
用户可以通过单击DEL或BACKSPACE作为任何其他字符等来删除这样的合并代码。通过为这样的input.mergecode拥有适当的CSS,我可以实现我想要的look-n-feel。

但是通过这种方式,我在三个不同的UA中有三个不同的问题:

> IE – CSS {font:inherit}根本不起作用,因此如果输入位于< b>像这样< b>< input value =“test”>< / b>它不会继承任何字体样式。
> FF – 包含< input>的片段的副本元素从剪贴板内容删除该输入,因此进一步的粘贴操作会插入所有内容而不是输入。
> GC – 在< input>之后立即点击{BACKSPACE}产生奇怪的结果(bug)

所以我正在寻找如何在HTML中表示不可编辑的内嵌块“岛”的其他想法。

到目前为止我已经尝试过的其他方法

>< span contenteditable =“false”> MergeCode1< / span> – 它不起作用,因为大多数UA从选择中删除这样的节点。所以说,应用< b>是不可能的。或者< i>在包含这样的跨度的选择之上。

任何其他想法?

解决方法

我是CKEditor开发人员。我们有一些嵌套readonly元素的经验(即 placeholder插件和我们目前正在开发的功能 #9764),我没有好消息。如果你想拥有一致的外观和感觉,你必须手动处理每一个行为。没有技巧会修复浏览器。许多事情(像这样在奇怪的事情发生在GC上的输入)似乎是无法解决的。

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些