1

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' ヘッダー タグを除いたもの)。ここで明らかに間違っていることはありますか?

4

2 に答える 2

2

次の行を置き換えます。

$(this).html($(this).text());

... これとともに:

$(this).replaceWith($(this).text());

...そしてそれはうまくいくはずです(少なくともここではうまくいきます)。

于 2012-06-25T23:01:40.173 に答える
1
...snip
// Here's your bug:
$(':not(p)',$text).each(function() {
//  You can't use .html() to replace the content 
//     $(this).html($(this).text());
//   You have to replace the entire element, not just its contents:
    $(this).replaceWith($(this).text());
});
...snip
于 2012-06-25T23:02:23.070 に答える