0

私は次のものを持っています:

<div id="abc">
</div>

その div 内には、次のいずれかのみを含めることができます。

<p class="message">
<p class="message error"></p>
<p class="message warning"></p>
<p class="message success"></p>
<p class="message loading"></p>

<p>「メッセージ」ではない要素からクラスのみを見つけて削除する方法はありますか。すべてを削除してから .removeClass() で必要なものを追加できることはわかっていますが、以前にメッセージクラスを追加した後、いくつかの CSS 変更を行ったので、これは機能しません。すべてを削除してから追加すると、これらは失われます。再びメッセージクラス。

4

4 に答える 4

2

クラスを に設定するだけ"message"です。単純に実行するよりも単純で意味的に意味のあるものにはなりません。ここでクラスを追加、削除、フィルタリング、またはその他の方法で操作する必要はありません。

$('#abc .message').attr("class", "message");

これは、「すべてを削除」するのではなく、単にクラスを に設定"message"するだけなので、基準を満たしているようです。クラスmessageが要素から削除されることはありません。

于 2012-09-21T03:36:11.710 に答える
1

あなたはただ行うことができます:

$('.message').removeClass().addClass('message');

この方法を考えたことはありますが、以前の CSS 操作は削除されると思いますが、あなたは間違っています - JavaScript で行われた CSS 操作は (style属性/プロパティを介して) 要素に直接適用されるため、削除されません。 .

また、(あなたの例では)アタッチできる他のクラスは4つしかないため、いつでも次のことができます。

$('.message').removeClass('error warning success loading');
于 2012-09-21T03:40:08.587 に答える
1

削除したいクラス名がわかっている場合は、これを試すことができます

$('p').removeClass('error warning success loading')
于 2012-09-21T03:42:47.240 に答える
0

この.removeClass()メソッドは、現在のクラス リストをパラメーターとして受け取り、削除するクラスを返すコールバック関数を受け取ることができるため、次のようにいくつかのバリエーションを実行できます。

var classToKeep = "message";    
$("#abc p").removeClass(function(i,c) {
    return c.replace(new RegExp("\\b" + classToKeep + "\\b"), "");
});

ミーガーとアーレンの回答はより良い解決策を提供すると思いますが、1つを除くすべてのクラスを削除する方法について具体的に尋ねたので...

于 2012-09-21T03:53:22.627 に答える