ユーザーの選択が段落にまたがる場合を考慮する必要があります。例 (パイプで示される選択境界):
<p>One <b>t|wo</b></p>
<p>Thr|ee</p>
これを処理するには、ユーザーの選択範囲内のすべてのテキスト ノードと部分テキスト ノードを<b>
タグでラップすると同時に、既に太字になっているテキスト ノードを検出してそのままにしておく必要があります。これは簡単ではdocument.execCommand()
なく、大規模な WYSIWYG エディターと同様に、すべてを処理します。
ほとんどのブラウザーでは、スタイル モードを切り替えることができます。これにより、 などの要素を使用したスタイル設定<b>
と、スタイル属性を持つ要素を<i>
使用したスタイル設定のいずれかを選択できます。<span>
「StyleWithCSS」コマンドを使用してこれを行うことができ、古いブラウザーでは「UseCSS」にフォールバックします。次のコマンドは、非 CSS バージョンを使用するように切り替えます。
try {
if (!document.execCommand("StyleWithCSS", false, useCss)) {
// The value required by UseCSS is the inverse of what you'd expect
document.execCommand("UseCSS", false, !useCss);
}
} catch (ex) {
// IE doesn't recognise these commands and throws.
}
<b>
最後に、 etcの代わりに CSS クラスを使用するように切り替えた場合は、RangyライブラリのCSS クラス アプライヤー モジュールを使用できます。