ユーザーがドキュメント テンプレートを編集できるブラウザ ベースの 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 を使用することで、必要なルック アンド フィールを実現できます。
しかし、このようなアプローチでは、3 つの異なる UA に 3 つの異なる問題があります。
- IE - CSS
{ font:inherit }
は単純に機能しないため、入力が<b>
ここのように内部にある場合、<b><input value="test"></b>
フォント スタイルは継承されません。 - FF -
<input>
要素を含むフラグメントのコピーは、その入力をクリップボードのコンテンツから削除するため、さらに貼り付け操作を行うと、すべてが挿入されますが、入力は挿入されません。 <input>
GC -奇妙な結果が生成された直後に {BACKSPACE} をクリックします (バグ)
そのため、編集不可能なインライン ブロックを HTML の「島」のように表現する方法について、他のアイデアを探しています。
私がこれまでに試した他のアプローチ:
<span contenteditable="false">MergeCode1</span>
- ほとんどの UA がそのようなノードを選択から削除するため、機能しません。<b>
そのため、たとえば、そのようなスパンを含む選択の上または<i>
上に適用することはできません。
他のアイデアはありますか?