Я работаю над этим простым выбором, который добавляет «активный» класс к элементу, по которому щелкнули мышью, и добавляю класс «отключить» к элементу в противоположном контейнере.
Моя проблема в том, как переместить класс active/disabled из .col-md-5ths в их дочерний элемент .num.
пожалуйста, проверьте код.
Спасибо.
$('.numChoice > .col-md-5ths').click(function() {
if (!$(this).hasClass('disabled')) {
var otherSide = $(this).parent().hasClass('first-row') ? '.second-row' : '.first-row';
var otherElement = $(otherSide).children().removeClass('disabled').eq($(this).index());
$(this).toggleClass('active').siblings().removeClass('active');
$(this).hasClass('active') ? otherElement.addClass('disabled') : otherElement.removeClass(
'disabled');
$(this).hasClass('disabled') ? otherElement.removeClass('active') : otherElement.removeClass(
'active');
} else {
$(this).removeClass('disabled');
var otherSide = $(this).parent().hasClass('first-row') ? '.second-row' : '.first-row';
var otherElement = $(otherSide).children().removeClass('disabled').eq($(this).index());
$(this).toggleClass('active').siblings().removeClass('active');
$(this).hasClass('active') ? otherElement.addClass('disabled') : otherElement.removeClass(
'disabled');
$(this).hasClass('disabled') ? otherElement.removeClass('active') : otherElement.removeClass(
'active');
}
});.numChoice{
display: block;
}
.num{
width: 20px;
height: 20px;
background-color: #DDD;
text-align: center;
float: left;
cursor: pointer;
}
.col-md-5ths.active{
color: green;
}
.col-md-5ths.disabled{
color: red;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "container">
<div class = "numChoice first-row">
<div class = "col-md-5ths">
<div class = "num">1</div>
</div>
<div class = "col-md-5ths">
<div class = "num">2</div>
</div>
<div class = "col-md-5ths">
<div class = "num">3</div>
</div>
<div class = "col-md-5ths">
<div class = "num">4</div>
</div>
<div class = "col-md-5ths">
<div class = "num">5</div>
</div>
</div>
<br><br>
<div class = "numChoice second-row">
<div class = "col-md-5ths">
<div class = "num">1</div>
</div>
<div class = "col-md-5ths">
<div class = "num">2</div>
</div>
<div class = "col-md-5ths">
<div class = "num">3</div>
</div>
<div class = "col-md-5ths">
<div class = "num">4</div>
</div>
<div class = "col-md-5ths">
<div class = "num">5</div>
</div>
</div>
</div>Вы злоупотребляете троичными. Просто используйте otherElement.toggleClass(active)
@mplungjan да, сэр, я бы хотел добавить активный / отключенный класс в .num



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете сделать это так ...
$('.numChoice > .col-md-5ths').click(function(index,el) {
var thisind = $(this).index() + 1;
if ($(this).parent().hasClass('first-row')){
$(this).addClass('active');
$(this).siblings().removeClass('active');
$('.second-row .col-md-5ths').removeClass('disabled');
$('.second-row .col-md-5ths:nth-child('+thisind+')').addClass('disabled');
}
else {
$(this).addClass('disabled');
$(this).siblings().removeClass('disabled');
$('.first-row .col-md-5ths:nth-child('+thisind+')').addClass('disabled');
}
});.numChoice{
display: block;
}
.num{
width: 20px;
height: 20px;
background-color: #DDD;
text-align: center;
float: left;
cursor: pointer;
}
.col-md-5ths.active{
color: green;
}
.col-md-5ths.disabled{
color: red;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "container">
<div class = "numChoice first-row">
<div class = "col-md-5ths">
<div class = "num">1</div>
</div>
<div class = "col-md-5ths">
<div class = "num">2</div>
</div>
<div class = "col-md-5ths">
<div class = "num">3</div>
</div>
<div class = "col-md-5ths">
<div class = "num">4</div>
</div>
<div class = "col-md-5ths">
<div class = "num">5</div>
</div>
</div>
<br><br>
<div class = "numChoice second-row">
<div class = "col-md-5ths">
<div class = "num">1</div>
</div>
<div class = "col-md-5ths">
<div class = "num">2</div>
</div>
<div class = "col-md-5ths">
<div class = "num">3</div>
</div>
<div class = "col-md-5ths">
<div class = "num">4</div>
</div>
<div class = "col-md-5ths">
<div class = "num">5</div>
</div>
</div>
</div>Я создал для вас образец рабочий пример
$('.numChoice > .col-md-5ths').click(function() {
var otherSide = $(this).parent().hasClass('first-row') ? '.second-row' : '.first-row';
var otherElement = $(otherSide).children().removeClass('disabled').eq($(this).index());
var $thisNum = $(this).children();
if (!$(this).hasClass('disabled')) {
$thisNum.toggleClass('active').siblings().removeClass('active');
$thisNum.hasClass('active') ? otherElement.addClass('disabled') : otherElement.removeClass('disabled');
$thisNum.hasClass('disabled') ? otherElement.removeClass('active') : otherElement.removeClass('active');
} else {
$(this).removeClass('disabled');
$thisNum.toggleClass('active').siblings().removeClass('active');
$thisNum.hasClass('active') ? otherElement.addClass('disabled') : otherElement.removeClass('disabled');
$thisNum.hasClass('disabled') ? otherElement.removeClass('active') : otherElement.removeClass('active');
}
});
спасибо, сэр, почти здесь, когда я нажимаю на элемент, он добавляет класс active в .num, это правильно. В другом контейнере класс disabled также должен быть в классе .num.
СУХОЙ: Не повторяйся
Вот более короткая версия
$('.numChoice > .col-md-5ths > .num').on("click", function(e) {
e.preventDefault(); // stop the link
var $this = $(this);
if ($this.is(".disabled")) return; // assuming you cannot click on a disabled
$this.toggleClass('active');
var act = $this.is(".active");
var idx = $this.parent().index();
var $otherSide = $this.closest(".numChoice").siblings(); // plural but only one
var $otherElement = $otherSide.find(".num").eq(idx);
$otherElement.toggleClass('disabled', act);
});.numChoice {
display: block;
}
.num {
width: 20px;
height: 20px;
background-color: #DDD;
text-align: center;
float: left;
cursor: pointer;
}
.num.active {
color: green;
}
.num.disabled {
color: red;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "container">
<div class = "numChoice first-row">
<div class = "col-md-5ths">
<div class = "num">1</div>
</div>
<div class = "col-md-5ths">
<div class = "num">2</div>
</div>
<div class = "col-md-5ths">
<div class = "num">3</div>
</div>
<div class = "col-md-5ths">
<div class = "num">4</div>
</div>
<div class = "col-md-5ths">
<div class = "num">5</div>
</div>
</div>
<br><br>
<div class = "numChoice second-row">
<div class = "col-md-5ths">
<div class = "num">1</div>
</div>
<div class = "col-md-5ths">
<div class = "num">2</div>
</div>
<div class = "col-md-5ths">
<div class = "num">3</div>
</div>
<div class = "col-md-5ths">
<div class = "num">4</div>
</div>
<div class = "col-md-5ths">
<div class = "num">5</div>
</div>
</div>
</div>Пожалуйста, посмотрите обновление - я думаю, что это лучшая версия
Вы можете добиться этого более простым способом, например следующим образом:
$('.numChoice .num').click(function() {
$('.num').removeClass('active').removeClass('disabled');
var parent = $('.first-row').has(this).length == 0?'.first-row' : '.second-row';
var idx = $(this).parent().index();
$(this).toggleClass('active');
$(parent+' .num').eq(idx).toggleClass('disabled');
});.numChoice{
display: block;
}
.num{
width: 20px;
height: 20px;
background-color: #DDD;
text-align: center;
float: left;
cursor: pointer;
}
.active{
color: green;
}
.disabled{
color: red;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "container">
<div class = "numChoice first-row">
<div class = "col-md-5ths">
<div class = "num">1</div>
</div>
<div class = "col-md-5ths">
<div class = "num">2</div>
</div>
<div class = "col-md-5ths">
<div class = "num">3</div>
</div>
<div class = "col-md-5ths">
<div class = "num">4</div>
</div>
<div class = "col-md-5ths">
<div class = "num">5</div>
</div>
</div>
<br><br>
<div class = "numChoice second-row">
<div class = "col-md-5ths">
<div class = "num">1</div>
</div>
<div class = "col-md-5ths">
<div class = "num">2</div>
</div>
<div class = "col-md-5ths">
<div class = "num">3</div>
</div>
<div class = "col-md-5ths">
<div class = "num">4</div>
</div>
<div class = "col-md-5ths">
<div class = "num">5</div>
</div>
</div>
Не уверен, что вы имеете в виду. Вы хотите щелкнуть .num и изменить родительский класс? Используйте
.closest. Также СУХОЙ - не повторяйся. Вы можете использовать toggleClass, чтобы не повторять код.