1

以前使用 jquery 删除的一些 css 类,例如。

html

<div class="one someclass"></div>
<div class="two otherclass"></div>
<div class="one otherclass"></div>
<div class="two someclass"></div>

jQuery

$('div').removeClass();

这将删除所有类。

现在我想为特定类捕获先前应用的类。

    $('div').addClass('someclass') 
      /* to which previously it was applied someclass in the above html
         that is add someclass to first class - one and last class -two*/
    $('div').addClass('otherclass') 
      /* to which previously it was applied otherclass in the above html
          that is add otherclass to first class - two and last class -one*/

编辑

就算是这样怎么办

<div class="one someclass"></div>
<div class="otherclass two"></div>
<div class="one otherclass"></div>
<div class="someclass one"></div>
4

3 回答 3

2

在删除之前保存它。

var classes = $("div")[0].className;

$('div').removeClass();

// ... Some Code Later

$('div').addClass(classes);

逐字逐句解决您的问题,您可以将所有类保存someClass为:

function saveClasses(className) {
      return $(className)[0].className.split(/\s+/)
           .filter(function(c) { return c!=className; }).join(" ");
}

var classes = saveClasses(".someClass");

var $div = $('.someClass').removeClass();

// Some Code Later

$div.addClass(classes);

这将添加除someClass.

于 2013-07-07T06:20:30.950 回答
1

为此,我创建了两个function和。在删除所有存储在属性中的调用时,我们可以在添加旧的时使用它removeAllClassaddOldClassclassoldClassclass

尝试这个:

function removeAllClass(selector) {
   selector = $(selector);
   selector.removeClass(function(el, cs) {
        $('.'  + cs.split(' ').join('.')).attr('oldClass', cs).removeClass(cs);
    });
}
function addOldClass(cs) {
    $('*[oldClass*=' + cs + ']').each(function(i, v) {
       var el = $(v);
       if ($.inArray(cs, $(v).attr('oldClass').split(' '))) {
           el.addClass(cs);
       }
    });
}

removeAllClass('div');
addOldClass('otherclass');
于 2013-07-07T07:18:15.290 回答
0

完全删除所有类的问题在于,它很难找到您想稍后将类添加回的元素集。

这是一个问题类非常适合解决 - 所以我建议自动添加基于当前类名生成的新类名 - 而不是仅仅删除所有类,用这些新生成的类名替换它们。

例如,每个具有类的元素someclass现在都将具有had-someclass类。

这是一些代码:

// replace all classes on all <div> elements with had-* classes instead
$('div').each(function() {
    // get the current classes
    var classes = this.className.split(/\s+/);
    for (var i=0; i<classes.length; i++) {
        // if it's not already a had-* class, make it one
        if (classes[i].substring(0, 4) != 'had-') {
            classes[i] = 'had-' + classes[i];
        }
    }
    // remove all classes, and add the had-* classes instead
    $(this).removeClass().addClass(classes.join(' '));
});

然后要添加回选定的缺失类,您可以执行以下操作:

// find everything that used to have the 'someclass' class, and put it back
$('div.had-someclass').toggleClass('had-someclass someclass');

显示此使用中的小提琴在这里:http: //jsfiddle.net/dy4rN/

于 2013-07-07T06:32:42.153 回答