7

次のようなテキストとhtmlタグの文字列を含む変数があります。

var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>";

特定の種類のタグをすべて削除したいのですが。pたとえば、すべてとspanタグを考えてみましょう。

これは私が思いつくことができる最高のものです:

var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>";
var $temp = $(temp);
$("p", $temp).replaceWith("foo");
alert($temp.html());  //returns "Some text"

私が見つけた最も近い応答は、Nick Craverによるこの回答です:jqueryを使用して文字列からスパンタグを削除します。

4

4 に答える 4

13

デモ: http: //jsfiddle.net/VwTHF/1/

$('span, p').contents().unwrap();

.contents()そのような各タグ内の要素とテキストを取得し、.unwrap各コンテンツセクションをラップしている要素を削除します。

現在のアプローチに基づくと、次のようになります。

var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>";
var $temp = $(temp);
$temp.find('span, p').contents().unwrap().end().end();

元のオブジェクトを引き続きターゲットにする場合は、を使用.end()してフィルターをクリアする必要があります。

于 2012-07-11T22:49:45.760 に答える
2

jqueryプラグインのHTMLCleanを試すことができます。例では、それらは以下を提供します:

$.htmlClean("<H1 class=\"header\"><P>Nested P Test</H1>", {format:true});

=> 
<h1>
        Nested P Test
</h1>

特定のタグをで置き換えることができますが{removeTags:[p]}、それでもタグではなくコンテンツがレンダリングされます。

于 2012-07-11T22:33:05.777 に答える
0

<b>私は同様のことをしなければなりませんでした:テキストのブロックに、、<i>または以外のHTMLタグが含まれないようにします<u>。この質問と他のいくつかの質問は、私自身の機能に向けて私を指摘しました:

function cleanNonFormattingTags(htmlContents) {
    if (htmlContents && htmlContents.length) {
        var result = '';
        htmlContents.each(function () {
            var $child = $(this), type = $child.prop('tagName'), isTextNode = this.nodeName == "#text";
            if (isTextNode) {
                result += this.textContent;
            }
            else if (type == 'B' || type == 'U' || type == 'I' || type == 'BR') { // Allow only these types of tags
                var innerContent = cleanNonFormattingTags($child.contents());
                var $newTag = $(document.createElement(type)).html(innerContent);
                result += $newTag[0].outerHTML;
            }
            else {
                result += cleanNonFormattingTags($child.contents());
            }
        });
        return result;
    }
    return htmlContents.text();
}

お役に立てれば!

于 2013-05-28T19:25:10.417 に答える
0

@nbrooksの回答はあなたが望むものに非常に近いので、フォローアップしますが、完全ではありません。@nbrooksは、html()がタグでラップされたデータを提供することに注目して、ソリューションにヒットしました。したがって、解決策はHTMLをタグでラップすることです。これはあなたのためのトリックをするはずです:

var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>";
$("<span>" + temp + "</span>").find('span,p').
  contents().unwrap().end().end().html()`

例については、 http://jsfiddle.net/18u5Ld9g/1/を参照してください。

より一般的な機能として:

function stripTags(html, tags) {
  // Tags must be given in CSS selector format
  return $("<span>" + html + "</span>").find(tags).
    contents().unwrap().end().end().html();
}
于 2017-10-12T18:38:10.927 に答える