我有一种基于浏览器的所见即所得编辑器,用户可以在其中编辑文档模板。
文档模板是一个带有一些特殊“合并代码占位符”的普通 html。通过将这些占位符替换为来自 DB 的数据,此类模板得到“实例化”。这给出了最终文档 - 模板的一个实例。
我目前的方法如下所示:
<div contenteditable>
Sample template with <input type=button class="mergecode" value="MergeCode1">.
</div>
(在线示例:http: //jsfiddle.net/tFBKN/)
在这种情况下,输入是不可编辑的,并且表现为一个实心块——这正是我所需要的。用户可以通过单击 DEL 或 BACKSPACE 作为任何其他字符等来删除此类合并代码。通过为此类 input.mergecode 设置适当的 CSS,我能够实现我想要的外观。
但是通过这种方法,我在三个不同的 UA 中遇到了三个不同的问题:
- IE - CSS
{ font:inherit }
在那里根本不起作用,所以如果输入<b>
像这里一样在里面,<b><input value="test"></b>
它不会继承任何字体样式。 - FF - 包含
<input>
元素的片段副本会从剪贴板内容中删除该输入,因此进一步的粘贴操作会插入所有内容,但不插入输入。 <input>
GC - 在产生奇怪的结果后立即点击 {BACKSPACE} (错误)
所以我正在寻找其他关于如何在 HTML 中表示不可编辑的内联块类似“岛”的想法。
到目前为止我尝试过的其他方法:
<span contenteditable="false">MergeCode1</span>
- 它不起作用,因为大多数 UA 从选择中删除了此类节点。因此,不可能在包含此类跨度的选择之上应用<b>
或应用。<i>
还有其他想法吗?