简体   繁体   English

如何删除元素列表中的类并添加到另一个元素Jquery?

[英]How to remove a class in a list of elements and add to another element Jquery?

html. HTML。 The "active" class may be with the "render1", "render2", "render3" or "render4". “活动”类可以与“ render1”,“ render2”,“ render3”或“ render4”一起使用。 It is with "render2" in this case: 在这种情况下,它带有“ render2”:

<td class="render1">
<td class="render2 active">
<td class="render3">
<td class="render1">
<td class="tag1 active">
<td class="tag2 active">

I did this way... 我是这样的

  $(".render1").on("change", function(){ $(".render1").removeClass().addClass("active"); $(".render2").removeClass(); $(".render3").removeClass(); $(".render4").removeClass(); }); $(".render2").on("change", function(){ $(".render1").removeClass(); $(".render2").removeClass().addClass("active"); $(".render3").removeClass(); $(".render4").removeClass(); }); $(".render3").on("change", function(){ $(".render1").removeClass(); $(".render2").removeClass(); $(".render3").removeClass().addClass("active"); $(".render4").removeClass(); }); $(".render4").on("change", function(){ $(".render1").removeClass(); $(".render2").removeClass(); $(".render3").removeClass(); $(".render4").removeClass().addClass("active"); }); 

If I click "render3", the class it is removed from "render2" class and added to "render3". 如果单击“ render3”,则将其从“ render2”类中删除并添加到“ render3”中。 So the html will be end like this: 因此,html将会像这样结束:

<td class="render1">
<td class="render2">
<td class="render3 active">
<td class="render1">
<td class="tag1 active">
<td class="tag2 active">

It is not really working on my computer. 它在我的计算机上并没有真正起作用。 Is there a better way to do this? 有一个更好的方法吗? Thanks a lot! 非常感谢!

+1 to both @Wilmer and @marsh. 为@Wilmer和@marsh +1。 I'll also add that you can DRY up your code by just calling on 'click' for any valid element (you can add a common class between them to make it easy, but in the example I'll just use td ): 我还要补充一点,您可以通过仅对任何有效元素调用“ click”来干燥代码(可以在它们之间添加一个通用类以使其变得容易,但是在示例中,我将仅使用td ):

$('td').on('click', function() {
  $('.active').removeClass('active');
  $(this).addClass('active');
});

Though, if you want to only deal with the same 'type' of (eg .renderX or .tagX), I'd add a class to each. 但是,如果您只想处理相同的“类型”(例如.renderX或.tagX),我会为每个类添加一个类。

<td class="render render1"></td>
<td class="render render2 active"></td>
<td class="tag tag1 active"></td>
<td class="tag tag2></td>

And then: 接着:

$('.render').on('click', function() {
  $('.render.active').removeClass('active');
  $(this).addClass('active');
});

Or, alternatively, check for class similarities (and no need to add extra classes): 或者,检查类的相似性(无需添加额外的类):

$('td').on('click', function() {
  var classNameType = $(this).attr('class').replace(/\d|\s|active/gi, '');
  var selector = "[class*=" + classNameType + "]";
  $(selector).removeClass('active');
  $(this).addClass('active');
});

Here's an example of that last one: http://codepen.io/anon/pen/gbBNpV 这是最后一个示例: http : //codepen.io/anon/pen/gbBNpV

Use click event instead of change 使用click事件代替change

$(<element>).on("click", function(){
   ...
 });

You have to specify which class you want to remove try .removeClass("active") . 您必须指定要删除的类,请尝试.removeClass("active") Also jQuery is "smart" if you add the same class twice it will not duplicate so you don't need to remove it. 同样,如果您两次添加相同的类,则jQuery是“智能的”,它将不会重复,因此您无需删除它。

Seems kind of a weird way to do things, but... 似乎是一种奇怪的做事方式,但是...

$(".render1").on("click", function(){
   $(".render1").removeClass("active").addClass("active");
   $(".render2").removeClass("active");
   $(".render3").removeClass("active");
   $(".render4").removeClass("active");
 });
$(".render2").on("click", function(){
   $(".render1").removeClass("active");
   $(".render2").removeClass("active").addClass("active");
   $(".render3").removeClass("active");
   $(".render4").removeClass("active");
 });
 $(".render3").on("click", function(){
   $(".render1").removeClass("active");
   $(".render2").removeClass("active");
   $(".render3").removeClass("active").addClass("active");
   $(".render4").removeClass("active");
 });
 $(".render4").on("click", function(){
   $(".render1").removeClass("active");
   $(".render2").removeClass("active");
   $(".render3").removeClass("active");
   $(".render4").removeClass("active").addClass("active");
 });

http://jsfiddle.net/bvaughn/ung70b84/ http://jsfiddle.net/bvaughn/ung70b84/

Sam Thornton has the best answer so far. 到目前为止,山姆·桑顿的答案是最好的。

Keep in mind that removeClass() with no parameters is still perfectly valid, but it removes all classes from the selected object(s). 请记住,不带参数的removeClass()仍然是完全有效的,但是它将删除所选对象中的所有类。 That is not what you wanted to do this time around, but it may come in handy in the future. 这不是您这次想要做的,但是将来可能会派上用场。

I would encourage you to always become familiar with the documentation, which in this case is located here: http://api.jquery.com/removeclass/ 我鼓励您始终熟悉文档,在这种情况下位于此处: http : //api.jquery.com/removeclass/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM