使用 jQuery 替换与另一个 class 相邻的 class

Using jQuery to replace a class that is adjacent to another class

我正在尝试使用 jQuery 替换与另一个 class 相邻的 class。

我不能简单的替换掉class,因为同一个class在不同的情况下使用,需要替换成不同的class。

示例更容易显示。

<div class="cancel button button-primary>
<div class="next button button-primary>
<div class="prev button button-primary>
<div class="send button button-primary>

我需要替换的是button-primary,但是根据另一个class换成不同的class,即cancelnextprevsend.

结果需要是:

<div class="cancel button button-red>
<div class="next button button-blue>
<div class="prev button button-grey>
<div class="send button button-green>

如果我使用此代码:

jQuery('.target_element').removeClass('button-primary').addClass('button-red');

它会将 button-primary 的所有实例替换为 button-red。那不是目标。

如何设置一个条件脚本,将 button-primary 替换为相关的 class?

在那种情况下:

jQuery('.target_element').removeClass('button-primary').addClass('button-red');

target_element 将是唯一的 class,因此它的更改只能应用于该元素,例如:

jQuery('.cancel').removeClass('button-primary').addClass('button-red');

这里一页中只有一个 cancel class。或者使用 # 即 Id 选择器而不是 class 选择器

尝试:

$('.button').removeClass('button-primary');
$('.cancel').addClass('button-red');
$('.next').addClass('button-blue');
$('.prev').addClass('button-grey');
$('.send').addClass('button-green');

这可能是最短的方法,除非你有更多这种情况,然后你可以设置一个组合数组并使用循环。

您可以将函数传递给 .addClass(),该函数必须 return 应该添加的 class。

var mapping = {
  "cancel": "red",
  "next": "blue",
  "prev": "grey",
  "send": "green"
};
  
$(".button-primary")
  .addClass(function(_, classes) {
      var relevantClass = classes.split(" ").shift();
      return mapping[relevantClass] || "";
    })
  .removeClass("button-primary");
.button-primary { font-style: italic }
.red { color: red }
.blue { color: blue }
.grey { color: grey }
.green { color: green }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="cancel button button-primary">cancel</div>
<div class="next button button-primary">next</div>
<div class="prev button button-primary">prev</div>
<div class="send button button-primary">send</div>

您可以将依赖项存储在内部,例如一个对象,然后只引用它,同时使用 button class.

对每个元素进行操作

var elems = document.getElementsByClassName('button'),
    obj = {cancel: 'button-red', next: 'button-blue', prev: 'button-grey', send: 'button-green'};
    
    Object.keys(obj).forEach(function(v) {
      var elem = document.querySelector("." + v);
      elem.classList.remove('button-primary');
      elem.classList.add(obj[v]);
    })
    
    console.log(Array.from(elems));
<div class="cancel button button-primary">
<div class="next button button-primary">
<div class="prev button button-primary">
<div class="send button button-primary">

尝试以下操作:

$('div.button').each(function(){
  if($(this).hasClass('cancel')){
    $(this).removeClass('button-primary')
    $(this).addClass('button-red')
  }
  else if($(this).hasClass('next')){
    $(this).removeClass('button-primary')
    $(this).addClass('button-blue')
  }
  else if($(this).hasClass('prev')){
    $(this).removeClass('button-primary')
    $(this).addClass('button-grey')
  }
  else if($(this).hasClass('send')){
    $(this).removeClass('button-primary')
    $(this).addClass('button-green')
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="cancel button button-primary">
<div class="next button button-primary">
<div class="prev button button-primary">
<div class="send button button-primary">

Select 所有 .button-primary 元素并使用 addClass( function ) 将新的 class 添加到所选元素。在回调函数中添加您的条件和 return 您的目标新 class。添加新 class 后使用 .removeClass()

删除旧 class

$(".button-primary").addClass(function(){
  if ($(this).hasClass("cancel"))
    return "button-red";
  else if ($(this).hasClass("next"))
    return "button-blue";
  else if ($(this).hasClass("prev"))
    return "button-gray";
  else if ($(this).hasClass("send"))
    return "button-green";
}).removeClass("button-primary");
.button-red {color: red}
.button-blue {color: blue}
.button-gray {color: gray}
.button-green {color: green}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="cancel button button-primary">cancel</div>
<div class="next button button-primary">next</div>
<div class="prev button button-primary">prev</div>
<div class="send button button-primary">send</div>