私はカスタム CMS に取り組んでおり、テキストエリアで編集するために表示される HTML のセクションを選択し、それを囲むタグを別のタグに置き換えたいと考えています。たとえば、段落要素を選択して、ワンクリックで h3 に変換し、他のタグはそのままにしておくことができます。
テキストエリアでの getSelection/replaceSelectedText 操作を可能にするためにrangyinputsを実装しました。これまでのところ、次のようになっています。
function add_html_tag(target_ID, replace_tag) {
$(target_ID).focus();
$(target_ID).replaceSelectedText('<' + replace_tag + '>' + $(target_ID).getSelection().text.replace(/(<([^>]+)>)/ig,"") + '</' + replace_tag + '>');
}
これは問題なく機能しますが、囲んでいるタグだけでなく、ターゲット テキストからすべてのタグが削除されるため、選択したテキスト内の他のタグも削除されます。
どんなアイデアでも、replace ステートメントの正規表現を変更するだけでよいと思います。テキストエリアにはプレーンテキストしか含まれていないため、unwrap などの jQuery メソッドを使用できません。明らかに、HTML でこのような正規表現操作を行うとエラーが発生しやすくなりますが、今のところ、ユーザーがテキストを正しく選択していると仮定します!