7

さて、私は興味深いものを手に入れました(まあ、とにかく私にとって興味深いです:))。

静的クラス値を持つ div がある状況がありますが、動的な単一の「セカンダリ クラス」が割り当てられることもあります。ユーザーが選択を行うとき、既存のセカンダリ クラスを削除し、新しいクラスを追加する必要があります。

id 値の使用を無視する (プロジェクトの標準では、クラスを使用します . . . 変更できません)、最初のクラスを単純に無視し、他のクラスを削除してから、新しいクラスを追加するエレガントな方法はありますか?

例 HTML の開始:

<div class="staticClass dynaClass1" />

JS の例:

function updateClass(newSecondaryClass) {
    $(".staticClass") . . . **** remove any class besides "staticClass" ****
    $(".staticClass").addClass(newSecondaryClass);
}

関数が を使用して呼び出された場合updateClass("dynaClass2");、結果の HTML は次のようになります。

<div class="staticClass dynaClass2" />

removeClass();新しいクラスを追加するとき、または を使用するときに、「staticClass」を使用してすべてのクラスを削除して追加する方法を考えることができますが、attr("class", "staticClass " + newSecondaryClass);に触れることなくそれを処理する方法がないかどうか疑問に思っていますまったく静的クラス?

結局、これは何よりも学問的な問題だと思います。. . それは実行可能であるべきもののように思えますが、私はそれを行う方法がわかりません。:D

4

5 に答える 5

11

すべてのクラスを削除して、残したいクラスを追加できます。

$(".staticClass").removeClass().addClass('staticClass');

パラメータなしで呼び出すremoveClass()と、すべてのクラスが削除されます。

それをしたくない場合は、単純に class 属性を変更できます。

$(".staticClass").attr('class', 'staticClass');
于 2013-01-14T16:17:14.783 に答える
5

関数を渡してクラスを削除すると、静的クラスを除くすべてが返されます。

$('.staticClass').removeClass(function(index, klass) { 
  return klass.replace(/(^|\s)+staticClass\s+/, ''); 
})

これにより、静的クラスを除いて、オブジェクト上にあるすべてのクラスが返されるため、静的クラスを除くすべてのクラスが削除されます。

于 2013-01-14T16:22:39.310 に答える
4

関数を渡す.removeClass()

このページのBeat Richartzの回答の改訂。

注: これを編集として投稿しようとしましたが、拒否されました。概念は同じですが、RegEx が改善されています。

改善された RegEx は、複数のクラスとの単語境界マッチングを提供します

// Remove all classes except those specified
$('span').removeClass(function () { 
    return $(this).attr('class').replace(/\b(?:hello|world)\b\s*/g, ''); 
});

前:

<span class="hello foo">hello</span> <span class="world bar">world</span>`

後:

<span class="hello">hello</span> <span class="world">world</span>`

試してみてください: http://jsfiddle.net/gfullam/52eeK/3/

jQuery プラグインとして試してみてください: http://jsfiddle.net/gfullam/52eeK/5/

FWIW: このメソッドは、既存のクラスを のように他のクラスに置き換えたくない場合に必要ですが.attr('class', '<final list of classes>')、代わりに、クラスのリストに一致しないクラスを削除したいだけです。

于 2014-06-27T19:50:43.550 に答える
2

関数を使用して、必要なクラスを設定でき.attr()ます。それで:

$('.staticClass').attr('class','<any classes required');

これにより、元々そこにあったクラスが置き換えられ、新しいクラスが追加されます。

于 2013-01-14T16:20:01.410 に答える
0

すべてのクラスは Javascript DOM を呼び出すことによって操作されるelement.classNameため、基本的に jQueryaddClassはその文字列を置き換えるだけです。それはGithub sourceで確認できます。

つまり、あなたが電話した場合

$('.staticClass').addClass('someClass');

とにかく は置き換えられますelement.classNameが、新しいクラスが含まれています。(これは、あなたstaticClassが実際に触れていることを意味します:)

電話すると

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

その文字列を 2 回置換しますが、問題はありません。

于 2013-01-14T16:28:17.523 に答える