5

ユーザーがメッセージを作成すると、マルチボックスがあり、このマルチボックスは、ユーザーがフォント、色、サイズなどを変更できるデザイン パネルに接続されています。メッセージが送信されると、ユーザーが色を変更した場合、メッセージは html タグで表示されます。 、フォントのサイズなど。

注: デザイン パネルが必要です。削除できることはわかっていますが、そうではありません :)

これはSharepointの標準です。私が持っている唯一の解決策は、JavaScriptを使用してこれらのタグを表示時に削除することです。ユーザーは、リンク、画像の挿入、および改行の追加のみを行う必要があります。

つまり<a></a><img><br>タグを除くすべての html タグを削除する必要があります。

タグ内の属性<img>が削除されないことも重要です。次のように表示できます。

<img src="/image/Penguins.jpg" alt="Penguins.jpg" style="margin:5px;width:331px;">

javascriptでこれを達成するにはどうすればよいですか?

私は完全に機能する次のコードビハインド C# コードを使用していましたが、タグのみを除くすべての html タグを削除してしまいます<br>

public string Strip(string text)
{
   return Regex.Replace(text, @"<(?!br[\x20/>])[^<>]+>", string.Empty);
}

どんな種類の助けも大歓迎です

4

4 に答える 4

9

これはあなたが望むことをしますか?http://jsfiddle.net/smerny/r7vhd/

$("body").find("*").not("a,img,br").each(function() {
    $(this).replaceWith(this.innerHTML);
});

基本的に、a、img、br 以外のすべてを選択し、それらのコンテンツに置き換えます。

于 2013-08-08T14:13:11.907 に答える
3

HTML構造が次のようなものであることを除いて、Smernyの答えはうまく機能しています。

var s = '<div><div><a href="link">Link</a><span> Span</span><li></li></div></div>';
var $s = $(s);
$s.find("*").not("a,img,br").each(function() {
    $(this).replaceWith(this.innerHTML);
});
console.log($s.html());

ライブコードはこちら: http://jsfiddle.net/btvuut55/1/

これは、外部に 2 つ以上のラッパーがある場合に発生します (div上記の例では 2 つ)。

divjQuery が最初に最も外側に到達しinnerHTML、含まれspanているその が保持されているためです。

この回答$('#container').find('*:not(br,a,img)').contents().unwrap()は、空のコンテンツを持つタグを処理できません。

実際の解決策は簡単です:最も内側の要素から外側に向かってループします:

var $elements = $s.find("*").not("a,img,br");
for (var i = $elements.length - 1; i >= 0; i--) {
    var e = $elements[i];
    $(e).replaceWith(e.innerHTML);
}

作業コピーは次のとおりです。http://jsfiddle.net/btvuut55/3/

于 2015-01-04T10:09:23.643 に答える
2

jQuery を使用すると、不要な要素をすべて見つけることができます。その後、unwrap を使用してタグを削除します

$('#container').find('*:not(br,a,img)').contents().unwrap()

FIDDLE

于 2013-08-08T14:14:10.567 に答える
0

良いタグに抽出した方が良いと思います。残りの要素とすべての html の可能性を削除するよりも、いくつかのタグを一致させる方が簡単です。このようなことを試してみてください、私はそれをテストしました、そしてそれはうまくいきます:

// the following regex matches the good tags with attrinutes an inner content
var ptt = new  RegExp("<(?:img|a|br){1}.*/?>(?:(?:.|\n)*</(?:img|a|br){1}>)?", "g");
var input = "<this string would contain the html input to clean>";              
var result = "";

var match = ptt.exec(input);                
while (match) {
    result += match;
    match = ptt.exec(input);
}

// result will contain the clean HTML with only the good tags
console.log(result);
于 2013-08-08T15:27:44.467 に答える