2013-08-16 2 views
0

Хорошо, поэтому я ищу, чтобы сделать 3 разных кнопки, управляющих классом для одного элемента. Но только один класс может использоваться в любой момент времени, поэтому мне нужно удалить два класса, которые не используются.jQuery переключает несколько классов на один элемент из 3 кнопок

Кнопки:

<ul class="group"> 
<li> <a href="#" class="small-btn">Small</a> </li> 
<li> <a href="#" class="med-btn">Medium</a> </li> 
<li> <a href="#" class="large-btn">Large</a> </li> 
</ul> 

Мой контент обертка:

<div id="main_content" class="large"> 
content here 
</div> 

Я не могу достаточно работать в моей голове, как я бы проверить против двух других классов и удалить их? Есть ли способ хранения классов как переменной в jQuery? Помощь ценится ..

+1

Если должны всегда быть 1 класс на '# main_content' элемент можно удалить все классы с помощью' removeClass() 'без параметров, а затем добавить класс требуется. Нет необходимости в проверке. –

+0

Или просто измените значение атрибута, как в моем ответе. Это сбрасывает весь атрибут. –

+0

@RoryMcCrossan Спасибо, я не знал, что могу оставить параметр пустым :) – Doidgey

ответ

4

Я предложил бы использовать данных- * атрибут, чтобы указать имя целевого класса

<ul class="group"> 
<li> <a href="#" class="small-btn" data-class="small">Small</a> </li> 
<li> <a href="#" class="med-btn" data-class="medium">Medium</a> </li> 
<li> <a href="#" class="large-btn" data-class="large">Large</a> </li> 
</ul> 

затем

$('ul.group a').click(function(e){ 
    e.preventDefault(); 
    $('#main_content').attr('class', $(this).data('class')); 
}); 

Демо: Fiddle

+0

Это кажется более чистым, чем другие решения, сохраняя родительский класс независимо от дочернего класса.Детские классы могут даже не потребоваться. –

+1

Вот как бы я это сделал, но я бы использовал делегирование вместо '$ ('. Group'). On ('click', 'a', function() {...}));' – bittersweetryan

+0

Люблю это , спасибо, так что очищайте – Doidgey

0

редактировать:. снял другие подходы, в результате чего этот (мой избр до сих пор ;-)

$(".group").on('click', 'a', function(e) { 
    e.preventDefault(); 
    var newClass = $(this).attr('class').replace('-btn',''); 
    $('#main_content').attr('class', newClass); 
}); 
+0

Спасибо, человек, действительно помог мне. Только пошел с ответом выше, потому что он был немного чище, но оценил человека. – Doidgey

+0

А, спасибо за добрые слова. Вышеприведенный ответ - тот, который я сам поеду для себя. Хотелось бы подумать, что я придумал бы что-то более близкое к этому на третьей итерации ;-) –

0

Я хотел бы предложить, хотя и непроверенных:

$('ul.group a').click(function(e){ 
    e.preventDefault(); 
    var $self = $(this); 
    $('#main_content').attr('class', $.trim($self.text().toLowerCase())); 
}); 

Предполагается, что новый класс для добавления - это текст элемента, а не имя класса элемента, который нажат, что не ясно из вашего вопроса, но если вы предпочли бы, чтобы класс элемента с щелчком стал класс #main_content, то я бы предложил т, вместо этого, следующие:

$('ul.group a').click(function(e){ 
    e.preventDefault(); 
    var self = this; 
    $('#main_content').attr('class', self.className); 
}); 

Ссылки:

2

Вот простой и чистый раствор:

$(document).ready(function() { 
    $("[class$='btn']").click(function() { 
     var $container = $('#main_content'); 
     $container.removeClass(); 

     var cls = $(this).attr('class'); 
     $container.addClass(cls.substring(0, cls.indexOf("-")));  
    }); 
}); 

http://jsfiddle.net/maximua/eudyY/

+0

, вообще говоря, когда я вижу соглашение об именах переменных $ ... ', я полагаю, что это означает его элемент jQuery. Ваша переменная '$ class' нарушает это соглашение (и является глобальным) –

+0

, и если вы собираетесь захватить новый класс из класса ссылок,' class.replace ('- btn', '') 'будет немного чище. –

+1

согласны на переменную $ class –

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