Я пытаюсь изменить класс CSS пары DIVs, связанный ниже, это мой jFiddle
Единственное изменение заключается в том, что класс -selected действительно имеет фоновое изображение, которое, как представляется, имеет фоновый цвет класса -non -selected.
Другая проблема заключается в выборе другого div, вы не можете выбрать первый снова. Что именно делает jQuery с классами? Когда я добавляю к нему класс -non -selected, он должен снова стать избранным, верно?
JQuery
$(".selector-box").click(function () {
$(".selector-box-selected").removeClass("selector-box-selected").addClass("selector-box");
$(this).removeClass("selector-box").addClass("selector-box-selected");
});
HTML
<div class="selector-box-selected"></div>
<div class="selector-box"></div>
<div class="selector-box"></div>
<div class="selector-box"></div>
CSS
.selector-box{
margin-bottom:2px;
width:328px;
height:46px;
background-color:rgba(255,255,255,.25);
}
.selector-box-selected{
margin-bottom:2px;
width:351px;
height:46px;
background-image:url(../images/layout/SelectedArrow.png);
}
Вы должны попробовать другой способ добавления и удаления классов, попробуйте следующее:
$(".selector-box").click(function () {
$('.selector-box').removeClass("selected");
$(this).addClass("selected");
});
Проблема с тем, что вы не можете сначала выбрать первый, заключается в том, что событие click не связано с ним, поскольку вы применяете его только к элементам <div>
с .selector-box
класса .selector-box
. Кроме того, CSS кажется прекрасным, проверьте скрипку: http://jsfiddle.net/9FZcz/2/
Уже есть ответы, которые предлагают решения, требующие некоторого рефакторинга, такие как добавление selected
класса к выбранным элементам, а не отдельное selector-box-selected
и selector-box
классы.
Хотя я думаю, что вы должны выполнить рефакторинг, так как он улучшает общий дизайн и приводит к уменьшению дублирования кода CSS, вот решение без рефакторинга кода.
Я отслеживал последний выбранный элемент, чтобы не перебирать все поля для удаления выбранного класса.
var selectedBox = $('.selector-box-selected').get();
$('.selector-box').add(selectedBox).click(function () {
if (selectedBox === this) return;
selectedBox = $([this, selectedBox])
.toggleClass('selector-box-selected')
.toggleClass('selector-box')
.get(0);
});
Я изменяю свой код abit
<div name="ss" class="selector-box-selected"></div>
<div name="ss" class="selector-box"></div>
<div name="ss" class="selector-box"></div>
<div name="ss" class="selector-box"></div>
$("div[name=ss]").click(function () {
$("div[name=ss]").removeClass("selector-box-selected").addClass("selector-box");
$(this).removeClass("selector-box").addClass("selector-box-selected");
});
не обращайте внимания на имя SS, измените его на то, что вы хотите: D
$(".selector-box").click(function () { $('.selector-box').removeClass("selected"); $(this).addClass("selected"); });
<div class="selector-box"></div> <div class="selector-box"></div> <div class="selector-box"></div> <div class="selector-box"></div>
Как это работает