2014-01-31 3 views
0

Как я могу использовать toggleCalss(), в подобной ситуации:JQuery переключения класса с несколькими вариантами

<div id="options"> 
    <span data-color="red">red</span> 
    <span data-color="green">green</span> 
    <span data-color="blue">blue</span> 
    <span data-color="black">black</span> 
</div> 

<div id="target"> 
    <span class="icon home">target</span> 
</div> 

$('#options').on('click', 'span', function() { 
    var $iclass= $(this).data('color'); 
    $('#target').find('span').toggleClass($iclass) 

}); 

В приведенном выше примере существующего класса не заменяется щелкнул один. Он просто добавляет дополнительные классы. Вот пример jsfiddle: http://jsfiddle.net/5UbuD/3/

+1

Так что, если я нажимаю на красный, а затем зеленый, диапазон должен иметь классы: значок, дома, и зеленый? – j08691

+0

Вы хотите [__this__] (http://jsfiddle.net/satpalsingh/5UbuD/8/) – Satpal

ответ

2
$('#options').on('click', 'span', function() { 
    var r = $(this).siblings().map(function() { 
     return this.getAttribute('data-color'); 
    }).get().join(' '); 

    var t = this.getAttribute('data-color'); 

    $('#target').find('span').removeClass(r).toggleClass(t); 
}); 

http://jsfiddle.net/z7hUM/

+1

Спасибо, ваше решение работает отлично. – user3176519

+0

@ user3176519 Добро пожаловать. – undefined

0

Вот как работает toggleClass.

Одно из возможных решений - я предполагаю, что вы должны сохранить классы home icon

var $tspan = $('#target').find('span'), 
    tsclazz = $tspan.attr('class'); 
$('#options').on('click', 'span', function() { 
    var $iclass = $(this).data('color'); 
    $('#target').find('span').attr('class', tsclazz + ' ' + $iclass) 
}); 

Демо: Fiddle

+0

Если он действительно хочет переключать классы, это не сработает. Например, нажатие синего дважды не удаляет его при втором щелчке. – j08691

-1

Самое лучшее, может быть, не использовать toggleClass

$('#options').on('click', 'span', function() { 
    var $iclass= $(this).data('color'); 
    $('#target').find('span').removeClass(); 
    $('#target').find('span').addClass($iclass); 

}); 
0

http://jsfiddle.net/5UbuD/12/

$('#options').on('click', 'span', function() { 
    var $iclass= $(this).data('color'); 
    var target = $('#target').find('span'); 
    // toggle class 
    $iclass = target.hasClass($iclass) ? "" : $iclass; 
    target.removeClass().addClass("icon home " +$iclass) 

}); 
0

Вы можете проверить класс диапазона, а затем удалить его.

$('#options').on('click', 'span', function() { 
    var $iclass = $(this).data('color'); 
    var elem = $('#target').find('span') 
    if (elem.hasClass($iclass)) { 
     elem.removeClass($iclass); 
    } else { 
     elem.removeClass().addClass("icon home " + $iclass) 
    } 
}); 

DEMO

Смежные вопросы