2011-10-19 11 views
10

特定のクラス以外の要素からすべてのクラスを削除するにはどうしたらいいですか?私はremoveClass()で使うことができないと仮定しています。私に<div class="aa bb cc dd ee ff"></div>があり、aa ddを除くすべてのクラスを削除したいとしましょう。これどうやってするの。jQuery removeClass()ではなく特定のクラス

+0

なぜ仮定は 'ない使用することはできません:' – GusDeCooL

+1

は、単に ''十分に「AAのDD」にクラスを設定していませんか? – alf

+0

@pinkieこれらの回答は役に立ちましたか? –

答えて

17

は、なぜあなたはちょうどあなたがそれだけでクラス(ES)あなたがしたいとのすべてのクラスを上書きすることで行うことができますあなたがそう

$('#yourElement').attr('class',"aa dd"); 
4

あなたはすべてを削除し、戻って必要なものを追加することができます

$('#divID').removeClass() 
    .addClass('aa dd'); // add multiple classes by separating with space 

注:特定のクラス名を指定せずにremoveClass()を呼び出すと、すべてのクラスを削除します。

+0

これは、aaとddの両方がオリジナルに存在することを前提としています。ちょうどそれらを維持するにはもう少し作業が必要です(そこにあるものをチェックし、以前に存在していた場合にのみそれらを追加します)。) –

+0

@DanDaviesBrackett:それはOPのサンプルコードが示すものです:) Laurenceはスマートな答えを持っています。 – Sarfraz

+0

は、OPが既に存在していても保持する追加の要件を追加しない限り合意しました... –

2

一つの方法のようにしたいクラスを持つクラス属性に代わるものではありません。キープ。だから、あなたのdivは「myDiv」のIDを持っている場合は、あなたができる:

$('#myDiv').attr('class', 'aa dd'); 
2

あなたはあなたを保つために何をしたいのクラスを知っている場合は、単に再追加することができます彼ら(他の人がすでに示されているとおり)。

それはそれらのクラスがすでに適用されているかどうか知られていないので、私はさらに一歩それを取るだろうとけれども私はと仮定します:

var keep = ['aa','bb'], // list we'd like to keep 
    reAdd = [],   // ones that should be re-added if found 
    $el = = $(el);  // element we're working on 

// look for which we re-add (based on them already existing) 
for (var c = 0; c < keep.length; c++){ 
    if ($el.hasClass(keep[c])) reAdd.push(keep[c]); 
} 

// drop all, and only add those confirmed as existing 
$el 
    .removeClass()    // remove existing classes 
    .addClass(reAdd.join(' ')); // re-add the confirmed ones 
9

をそれ少しきれいにするために、あなたは少し拡張を作成することができます。

jQuery.fn.removeClassExcept = function (val) { 
    return this.each(function() { 
     $(this).removeClass().addClass(val); 
    }); 
}; 

次に、あなたが相続人

$("selector").removeClassExcept("aa dd"); 

の例のようにそれを使用することができます。http://jsfiddle.net/9xhND/

UPDATE、更新は今だけ、もともとあったクラスを維持しますブラッドクリスティーズロジックを使用して

新しいクラスを追加することはありません。 http://jsfiddle.net/9xhND/1/

jQuery.fn.removeClassExcept = function (val) { 
    return this.each(function (index, el) { 
     var keep = val.split(" "), // list we'd like to keep 
     reAdd = [],   // ones that should be re-added if found 
     $el = $(el);  // element we're working on 
     // look for which we re-add (based on them already existing) 
     for (var c = 0; c < keep.length; c++){ 
      if ($el.hasClass(keep[c])) reAdd.push(keep[c]); 
     } 

     // drop all, and only add those confirmed as existing 
     $el 
      .removeClass()    // remove existing classes 
      .addClass(reAdd.join(' ')); // re-add the confirmed ones 
    }); 
}; 
+0

このアドインは私のロジックと混じって完璧なソリューションになります。 removeClassExcept( 'd e') 'は存在しなかった' e'クラスを追加しますが、 '' div class = "a b c d f">と '$( 'div' –

+0

あなたは正しいです。それ以前になければ "e"が追加されます。 opの場合、それは問題ではないかもしれません。両方のバージョンを利用できるようにアップデートを追加します。 –

7

.removeClass()ので

$('div').removeClass(function(i, class){ 
    // variable class hold the current value of the class attribute 
    var list = class.split(' '); // we create an array with the classes 
    return list.filter(function(val){ // here we remove the classes we want to keep 
     return (val != 'aa' && val != 'dd'); 
    }).join(' '); // and return that list as a string which indicates the classes to be removed.. 
}); 
+0

私はこの解決策が好きです。すべてのクラスを削除するよりも綺麗です。 –

+0

@Benoîtほとんどの場合、最も簡単な答えは常に最高の答えです.... KISS !! –

+0

@Laurence Burke:はい、あなたの解決策では、クラスだけがあれば、それはddを追加します! –

4

jQueryのは、実際にremoveClassメソッドにコールバックパラメータを提供するので、あなた

..パラメータとして実際に削除するにはどのクラス返す関数を受け入れます単純なjavascript正規表現を使用して、削除したくないクラス以外のすべてのクラスを返すことができます:

$('#myDiv').removeClass(function() { 
    return $(this).attr('class').replace(/aa|bb/g, ''); 
}); 

このようにして、クラス 'aa'と 'bb'が存在しない場合は追加しません。

あなたがここにアクションでそれを見ることができます:http://jsfiddle.net/sr86u/3/