9

数千行の長さの自動生成されたHTMLドキュメントがいくつか提供されたので、ソースをクリーンアップする必要があります。ほとんどの場合、「table-col-##」などのクラス名を削除する必要があります。これは2段階の問題です。

  1. table-col-##を持つすべてのクラスを選択します。ここで、##は0〜999の整数です。
  2. 他のクラスを削除せずに、要素から一致するクラスを削除します

つまり、次のように要約できます。可能であれば、$()セレクターで正規表現を使用してから、each()で選択したクラスを取得するか、正規表現を$ .removeClass()に適用する方法が必要です。誰かが私を正しい方向に向けることができますか?

更新:$。removeClass([selected])機能はありますか?これは、2番目の部分を解決する最も簡単な方法のようです。

4

6 に答える 6

20

数字だけが受け入れられるが、他の文字も存在する可能性がある場合は、次のようなものから始めます(テストされていませんが、コメントの助けを借りて編集されています):

$("[class^='table-col-']").removeClass( function() { /* Matches even table-col-row */
     var toReturn = '',
         classes = this.className.split(' ');
     for(var i = 0; i < classes.length; i++ ) {
         if( /table-col-\d{1,3}/.test( classes[i] ) ) { /* Filters */
             toReturn += classes[i] +' ';
         }
     }
     return toReturn ; /* Returns all classes to be removed */
});
于 2013-03-25T15:10:21.850 に答える
5

これは、クラス名を配列に分割する必要なしに実行できます。正規表現にすべての作業を任せます。

見つかった要素ごとに、正規表現に一致するすべてのクラスを削除します。

$("[class^='table-col-']").removeClass( function() {
    return (this.className.match(/\b(table-col-\d{1,3})\b/g) || []).join(' ');
})

于 2015-09-01T16:41:53.203 に答える
1

これを試してみてください:

http://jsfiddle.net/adiioo7/AmK4a/1/

JS:-

$(function () {
    $("div").filter(function() {
        return this.className.match(/table-col-\d{0,3}/);
    }).each(function(){
        var classToRemove=this.className.match(/table-col-\d{0,2}/)[0];
        $(this).removeClass(classToRemove);
    });
});

サンプルHTML:-

<div class="table-col-0 temp">Test0</div>
<div class="table-col-99">Test99</div>
<div class="table-col-999">Test999</div>

出力HTML:-

<div class="temp">Test0</div>
<div class="">Test99</div>
<div class="table-col-999">Test999</div>
于 2013-03-25T15:32:23.937 に答える
1

これを試して:

$.fn.removeClassRegExp = function (regexp) {
    if(regexp && (typeof regexp==='string' || typeof regexp==='object')) {
        regexp = typeof regexp === 'string' ? regexp = new RegExp(regexp) : regexp;
        $(this).each(function () {
            $(this).removeClass(function(i,c) { 
                var classes = [];
                $.each(c.split(' '), function(i,c) {
                    if(regexp.test(c)) { classes.push(c); }
                });
                return classes.join(' ');
            });
        });
    }
    return this;
};

ライブ: http: //jsfiddle.net/Z3D6P/

于 2014-02-27T17:16:54.100 に答える
0

試す

var className = 'table-col-';
$('[class^='+className+']').removeClass(function(index, class) {
    return class.indexOf(className) == 0;
});

http://api.jquery.com/removeClass/およびhttp://api.jquery.com/attribute-starts-with-selector/を参照してください

編集:

var className = 'table-col-';
$('[class^='+className+']').removeClass(function(index, c) {
    var elem = $(this);
    $(c.split(' ')).each(function() {
        var c = this.trim();
        if(this.indexOf(className)==0) {
            elem.removeClass(c);
        }
    });
});
于 2013-03-25T15:03:44.403 に答える
0

この質問は今では古くなっていますが、他の誰かがそれに遭遇した場合...

シンプルなプラグインjquery.classMatchを作成しました。

$(selector).hasClassMatch(regexp)
$(selector).removeClassMatch(regexp)
于 2014-04-30T21:59:45.920 に答える