Javascript jQuery:删除并重新添加类

Javascript jQuery:删除并重新添加类,javascript,jquery,css,Javascript,Jquery,Css,在问这个问题之前,我已经搜索了很多,但我可能搜索/问错了问题: 我想选择元素的最后两个类(有多个类和未知数量的类)并将其存储在变量中。然后我想删除这两个类,并在稍后添加它们(比如toggleClass)。第一类已知,而第二类未知 例如: <div class="c1 c2 c3 c-unknown"></div> 我想选择c3和c-unknown 我已经尝试了split(),它似乎是一个解决方案,但我不能完全让它工作 非常感谢您提供的任何帮助/指导。您可以将它们存储

在问这个问题之前,我已经搜索了很多,但我可能搜索/问错了问题:

我想选择元素的最后两个类(有多个类和未知数量的类)并将其存储在变量中。然后我想删除这两个类,并在稍后添加它们(比如toggleClass)。第一类已知,而第二类未知

例如:

<div class="c1 c2 c3 c-unknown"></div>

我想选择
c3
c-unknown

我已经尝试了
split()
,它似乎是一个解决方案,但我不能完全让它工作


非常感谢您提供的任何帮助/指导。

您可以将它们存储在元素本身上,以便隔离多个实例

下面的解决方案不需要类以任何特定的顺序排列,也不需要考虑元素上有多少类

$('.c1').each(function () {
    /* array of classes on elemnt*/
    var classes = $(this).attr('class').split(' ');
    /* remove the targeted selector from array */
    classes.splice(classes.indexOf('c1'), 1);
    /* remove the extra classes from element and store */
    $(this).removeClass(classes.join(' ')).data('classes', classes);

});
对于特定元素,也可以使用
attr(函数)

然后重新使用存储的类

var $el = $('.c1:first');
$el.addClass( $el.data('classes').join(' '))

我相信这就是你想要做的

var ele = document.getElementsByClassName('c1'),
    classes = ele[0].className,
    classArr = classes.split(' '),
    spliceIndex = classArr.length - 2,
    last2Classes = classArr.splice(spliceIndex, 2);
这是一张工作票


如果您试图删除这些类,可以使用jquery,也可以使用dom元素的className属性,并将其设置为具有要使用的类的数组。您可以在任意一个数组上使用array方法.toString(),它将为您提供类的字符串表示形式。

可能是获取最后两个类的最简单方法:

var lastTwoClasses = $('.c1').attr('class').split(/\s+/).slice(-2).join(' ');
切换(例如使用按钮
id=“btn”
):


编辑。 还有另一种方式:

$('.c1').each(function(){
    var classes = $(this).attr('class').split(/\s+/).slice(-2).join(' ');
    $(this).click(function(){
        $(this).toggleClass(classes);  
    });
});

这里的答案可以帮助您获得所需的部分功能:

首先,您可以使用split,然后像这样删除类 (为演示目的添加了示例文本和css):

函数删除类(el){
var classes=el.attr(“class”).split(/\s/);
var second_to_last=classes[classes.length-2];//second to last class
var last=classes[classes.length-1];//last class
el.removeClass(从第二个到最后一个,最后一个);
}
$(“按钮”)。单击(函数(){
移除类($('.c1'));
});
.c-未知{font-weight:bold}
.c3{color:pink}

基础知识


删除最后两个类
是否查看了.removeClass调用?我不确定我是否完全理解这个要求。因此,如果您想使用选择器
$('.c3[class^=“c-”],.c3[class*=“c-”])
。但这是不可读的。只是如果你删除了这个类,你将不能重新选择它来重新添加你的类。您需要缓存它。@user2524908我想选择最后两个类
c-unknown
是未知的,因为它是动态创建的。我需要能够选择这两个类,无论
c-unknown
最终变成什么@Rafazio
c-unknown
是一个未知类。它将动态创建,因此我没有类名。这不是你发布的问题的重复。谢谢@Karl AndréGagnon。我应该进一步澄清,
c-unknown
可以是任何类名,不管大小写或字符(尽管没有符号或数字)@shooghkirk所以。。。未知类的规则是什么?你怎么知道哪门课是未知的?你给了我一些关于这门课的家庭作业。看起来不错。让我试试,然后再给你回复。我真的很感激。在创建演示时发现语法错误,添加了demo linkPerfect。非常感谢你在这方面的帮助!道格,这看起来棒极了。再一次,给我更多的家庭作业。我不知道这怎么行得通,但让我再告诉你。我真的很感激。如果你有任何问题,请随时提问。我可以解释任何看起来令人困惑的部分。我只是想建立你上面描述的。非常感谢菲利普!开箱即用。我很感激。如果你不介意的话,我还有一个问题:如果你有多个
.someDiv
和不同的最后两个类呢?例如:
Something
Something
Something
等等。我猜:使用
each()
遍历它们中的每一个,并将它们存储到它们自己的唯一变量中,然后像您的示例一样使用
hasClass()
进行检查?如果这是基本的东西,请容忍我!嘿,非常感谢你抽出时间来帮我。我有一些硬件要做,以确保我得到这个权利,并检查您的方法,以及它将如何与我所拥有的工作。
$('#btn').click(function(){
    $('.c1').toggleClass(lastTwoClasses); 
});
$('.c1').each(function(){
    var classes = $(this).attr('class').split(/\s+/).slice(-2).join(' ');
    $(this).click(function(){
        $(this).toggleClass(classes);  
    });
});