jQueryプラグインとして書かれたリッチテキストエディタータイプのコントロールを使用しています。基本的に、IFrame をページに挿入し、編集可能にします。これは、リッチ テキスト コントロールのかなり標準的な機能です。
今、私が探しているのは、テキスト エディターからすべての書式設定を削除するオプションを改善することです。現在、正規表現の大規模なリストを使用して行われていますが、Google で簡単に検索すると、これは正しい方法ではないことがわかります。特定のタグ (段落タグなど) を残すことができるように、このフォーマット解除にある程度の柔軟性を持たせたいと考えています。
これを簡単に行うためにDOM解析に組み込まれたjQueryを使用しようとしていましたが、問題が発生しているようです。
サンプルの HTML 文字列があるとします。
<Body><p>One <strong>Two</strong> <em>Three</em></p></Body>
段落以外のすべてのタグが削除されるように、フォーマットを解除しようとしています。したがって、出力は次のような文字列になると予想しています。
<Body><p>One Two Three</p></Body>
サンプルコード:
//Some very simple HTML obtained from an editable iframe
var text = '<Body><p>One <strong>Two</strong> <em>Three</em></p></Body>';
var $text = $(text);
//All tags which are not paragraphs
$(':not(p)',$text).each(function() {
//Replace the tag + content with just content
$(this).html($(this).text());
});
//I'll be honest, I found this snippet somewhere else on stackoverflow,
//It seems to parse the jquery object back into an HTML string.
var returnVal = "";
$text.each(function(){
returnVal += $(this).clone().wrap('<p>').parent().html();
});
//Should be equal to '<p>One Two Three</p>'
return returnVal;
これは機能するはずですが、残念ながら機能しません。上記の例では、'returnVal' は入力と同じです ('body' ヘッダー タグを除いたもの)。ここで明らかに間違っていることはありますか?