2

重複の可能性:
特定の文字列で始まるすべてのクラスを削除します

6つのクラスの1つをランダムに本体に追加するスクリプトがあります。クラスには、次のように1から6までの番号が付けられます。

theme-1theme-6

それらすべてを削除するためのクリーンな方法が必要です。今私はこれを持っています:

$('body').removeClass('theme-1');
$('body').removeClass('theme-2');
$('body').removeClass('theme-3');
$('body').removeClass('theme-4');
$('body').removeClass('theme-5');
$('body').removeClass('theme-6');

しかし、それはちょっと不格好ですよね?「間のクラスを削除する」と言う方法はありtheme-1ますtheme-6か?

4

6 に答える 6

3

ループ インデックスを使用して、クラス名を生成できます。

classes = ""
for(i=1; i < 7; i++)
   classes += 'theme-' + i + " ";
$('body').removeClass(classes);
于 2013-02-01T16:07:51.877 に答える
1

すべてを 1 行にまとめることができます。

$('body').removeClass('theme-1 theme-2 theme-3 theme-4 theme-5 theme-6');

またはループを使用しますが、クラスが常に1 から 6 の間にある場合、ループは個人的にやり過ぎのように見えます。

于 2013-02-01T16:07:52.497 に答える
0

ここに投稿された回答。からのコードPatは次のとおりです。

$('body')[0].className.replace(/\theme-.*?\b/g, '');

しかし、からのこの回答Prestaulも良さそうです。この関数を使用します。

function removeClassByPrefix(el, prefix) {
    var regx = new RegExp('\\b' + prefix + '.*?\\b', 'g');
    el.className = el.className.replace(regx, '');
    return el;
}
于 2013-02-01T16:10:02.190 に答える
0
$('body').removeClass('theme-1 theme-2 theme-3 theme-4 theme-5 theme-6');

http://jsfiddle.net/Yms5M/

于 2013-02-01T16:11:54.143 に答える
0

ループでそれらをクリアできます。これは、少なくとも少しきれいです。

于 2013-02-01T16:07:27.120 に答える
0

それらの数がわからない場合は、正規表現を使用する必要があります。

document.body.className = document.body.className.replace(/(^| )theme-\d+( |$)/g, ' ');

jQuery API 内にとどまりたい場合は、これを使用します。

$('body').attr('class', function (i, className) {
    return className.replace(/(^| )theme-\d+( |$)/g, ' ');
});

に他のクラスがない場合はbody、それらをすべて一気に削除できます。

$('body').removeClass();
于 2013-02-01T16:09:40.330 に答える