Изменение класса CSS в jQuery

0

Я пытаюсь изменить класс CSS пары DIVs, связанный ниже, это мой jFiddle

Единственное изменение заключается в том, что класс -selected действительно имеет фоновое изображение, которое, как представляется, имеет фоновый цвет класса -non -selected.

Другая проблема заключается в выборе другого div, вы не можете выбрать первый снова. Что именно делает jQuery с классами? Когда я добавляю к нему класс -non -selected, он должен снова стать избранным, верно?

http://jsfiddle.net/9FZcz/

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);
}
  • 0
    Я пробую ваш код <div class="selector-box"></div> <div class="selector-box"></div> <div class="selector-box"></div> <div class="selector-box"></div> Как это работает

4 ответа

5

Вы должны попробовать другой способ добавления и удаления классов, попробуйте следующее:

$(".selector-box").click(function () {
    $('.selector-box').removeClass("selected");
    $(this).addClass("selected");
});

Обновлен JsFiddle

0

Проблема с тем, что вы не можете сначала выбрать первый, заключается в том, что событие click не связано с ним, поскольку вы применяете его только к элементам <div> с .selector-box класса .selector-box. Кроме того, CSS кажется прекрасным, проверьте скрипку: http://jsfiddle.net/9FZcz/2/

0

Уже есть ответы, которые предлагают решения, требующие некоторого рефакторинга, такие как добавление selected класса к выбранным элементам, а не отдельное selector-box-selected и selector-box классы.

Хотя я думаю, что вы должны выполнить рефакторинг, так как он улучшает общий дизайн и приводит к уменьшению дублирования кода CSS, вот решение без рефакторинга кода.

Я отслеживал последний выбранный элемент, чтобы не перебирать все поля для удаления выбранного класса.

DEMO

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);
});
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

  • 0
    Спасибо Винь, что отвечает на мой первый вопрос
  • 0
    Я основываюсь на вашем коде, но ответ Данзкусума лучше, используйте его код. Я рекомендую $(".selector-box").click(function () { $('.selector-box').removeClass("selected"); $(this).addClass("selected"); });
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню