在按钮组中切换 class

Toggling class in group of buttons

我有一组按钮的以下标记:

<div class="btn-group pull-right">
    <button type="button" class="btn btn-default" id="today">Today</button>
    <button type="button" class="btn btn-default" id="this_week">This Week</button>
    <button type="button" class="btn btn-default" id="this_month">This Month</button>
    <button type="button" class="btn btn-default" id="custom">Custom</button>
</div>

我正在尝试使用 jQuery 将按钮上的 class btn-default 替换为 class btn-primary,以便在单击时,单击的按钮将具有以下 class="btn btn-primary",组中具有 class btn-primary 的任何其他按钮将切换回 btn-default

对于我在下面提供的内容,是否有更优雅的解决方案?我是否必须为每个按钮编写一个函数?此外,我冒着将 btn btn-default 添加到已经具有 class 的按钮的风险。非常感谢任何帮助。

$("#today").click(function () {
    $(this).parent().find("btn btn-primary").removeClass("btn btn-primary");
    $(this).parent().addClass("btn btn-default");
    $(this).addClass("btn btn-primary");
});

Demo

$('.btn-group').on('click', '.btn', function() {
  $(this).addClass('btn-primary').siblings().removeClass('btn-primary').addClass('btn-default');
});
.btn-default {
  color: red;
}
.btn-primary {
  color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<div class="btn-group pull-right">
  <button type="button" class="btn btn-default" id="today">Today</button>
  <button type="button" class="btn btn-default" id="this_week">This Week</button>
  <button type="button" class="btn btn-default" id="this_month">This Month</button>
  <button type="button" class="btn btn-default" id="custom">Custom</button>
</div>

  1. $(this):是被点击的按钮
  2. addClass('btn-primary'): 添加指定的class到被点击的按钮
  3. .siblings('.btn'): 将获得具有 btn class of this 元素
  4. 的兄弟姐妹(同一级别的节点)
  5. .removeClass('btn-primary').addClass('btn-default'):相应地更新 classes siblings

请注意,您不必将 class btn-default 替换为 btn-primary,您只需应用 btn-primary class 即可,其样式将取代btn-default,因此您不必执行其他操作。

$('.btn-group .btn').on('click', function() { // On the click event for each button
  $(this) // get the button being clicked
    .addClass('btn-primary') // add the `btn-primary` class
    .siblings('.btn-primary') // get all sibling buttons which may already be selected
    .removeClass('btn-primary'); // remove the selected class
});
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="btn-group pull-right">
  <button type="button" class="btn btn-default" id="today">Today</button>
  <button type="button" class="btn btn-default" id="this_week">This Week</button>
  <button type="button" class="btn btn-default" id="this_month">This Month</button>
  <button type="button" class="btn btn-default" id="custom">Custom</button>
</div>

尝试利用 .toggleClass()

var buttons = $("button");
buttons.on("click", function() {
  buttons.toggleClass("btn-default", true).removeClass("btn-primary")
  .filter(this).toggleClass("btn-primary btn-default");
})
.btn-primary {
  background:yellow;
}

.btn-default {
  background:green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="btn-group pull-right">
        <button type="button" class="btn btn-default" id="today">Today</button>
        <button type="button" class="btn btn-default" id="this_week">This Week</button>
        <button type="button" class="btn btn-default" id="this_month">This Month</button>
        <button type="button" class="btn btn-default" id="custom">Custom</button>
      </div>