2013-02-10 3 views
0

Так что, если я хочу toggleClass(), чтобы добавить класс определенного элемента, который был нажат, как бы я это сделал?.toggleClass() добавляет определенный класс ссылок на клик

Я знаю, что это как основная синтаксическая вещь, но я довольно новичок в jQuery, поэтому любая помощь будет оценена. Более конкретно, у меня есть что-то вроде этого:

<div class=zoom></div> 

<div> 
    <div class=grid info a1></div> 
    <div class=grid info a2></div> 
    <div class=grid info a3></div> 
</div> 

$(".grid.info").click(function() { 
    $('.zoom').toggleClass("A1 or A2 or A3 depending on which was clicked"); 
}); 

Еще раз спасибо!

+0

ли это быть классом? Было бы проще, если бы вы использовали атрибут data. – Barmar

+0

Мне просто нужна конкретная информация, на которую был нажат div, чтобы я мог соответствовать содержимому в div 'zoom'. Поэтому, если был нажат div a1, содержимое a1 будет отображаться в пределах 'zoom' – weecho

ответ

1

Вы можете сделать это позиционное, если она всегда будет в порядке a1, a2, a3, etc..:

$(".grid.info").click(function() {  
    $(".grid.info").not(this).each(function(){ 
     var classToRemove = "a" + ($(this).index() + 1); 
     $('.zoom').removeClass(classToRemove); 
    }); 

    var classClicked = "a" + ($(this).index() + 1); 
    $('.zoom').toggleClass(classClicked); 
}); 

Demo - тумблер топор класс щелкнули DIV, удалить все другие ранее кликали топор


выше работает только если заказ всегда совпадает, но если ваши дивы в другом порядке, а затем index() становится бесполезным, и вы должны смотреть на добавление, возможно, данных-атрибутов, например:

<div class="grid info a3" data-class="a3">3</div> 
<div class="grid info a2" data-class="a2">2</div> 
<div class="grid info a1" data-class="a1">1</div> 

Использование данных-атрибутов, как уже предлагалось бы более ре ответственность и вы скрипт только немного меняется следующим образом:

$(".grid.info").click(function() {  
    $(".grid.info").not(this).each(function(){ 
     var classToRemove = $(this).data("class"); 
     $('.zoom').removeClass(classToRemove); 
    }); 

    var classClicked = $(this).data("class"); 
    $('.zoom').toggleClass(classClicked); 
}); 

DEMO - Использование атрибутов данных вместо


+0

Чувак. Ницца. Youdabest. – weecho

+0

Что делать, если я хочу сделать его более надежным и содержать разные буквы? Или передать сам титул? Не могли бы вы посоветовать использовать один тег ID, чтобы не разбираться в разных классах? – weecho

+0

Красивая! Еще раз спасибо! – weecho

0

Попробуйте это:

$(".grid.info").click(function() { 
     $(this).toggleClass('.zoom'); 
    }); 

.toggleClass (имя класса) .. Вы можете проверить это here. Таким образом, вы можете использовать ClassName, которое вы хотите переключить как параметр toggleClass

+0

Удалить. поскольку он уже принимает класс. напишите вот так: $ (this) .toggleClass ('zoom'); – jubair

+0

Он не хочет переключать класс 'zoom', он хочет переключать' a1', 'a2' и т. Д. – Barmar

0

Example of how to do this on jsFiddle.

HTML:

<div class="zoom"> 
    Zoom 
</div> 

<div> 
    <div class="grid info a1">1</div> 
    <div class="grid info a2">2</div> 
    <div class="grid info a3">3</div> 
</div> 

CSS:

.zoom { 
    display: none; 
} 

.show { 
    display: block; 
} 

JavaScript:

$(".grid.info").click(function() { 
    $('.zoom').toggle("show"); 
}); 
+0

Спасибо за быстрый ответ, это почти идеально.Есть ли способ передать класс ссылки, которая была нажата, чтобы я мог сделать div с увеличением, содержащими изображения, специфичные для ссылок, которые были нажаты? Поэтому, если a1 был нажат, тогда будет отображаться содержимое a1. Lemme знает, если это имеет смысл – weecho

+0

', так что я могу сделать div 'zoom', содержащие изображения, специфичные для ссылок, которые были нажаты?', Что полностью отличается от того, как спрашивать, как добавить класс из щелкнутого div в другой div. Вероятно, вы должны добавить эту важную информацию к вопросу. – Nope

+0

Это в его примерном коде: «A1 или A2 или A3 в зависимости от того, на что было нажата» ' – Barmar

0

HTML:

<div class="zoom"></div> 

<div> 
    <div class="grid info a1" data-class="a1"></div> 
    <div class="grid info a2" data-class="a2"></div> 
    <div class="grid info a3" data-class="a3"></div> 
</div> 

JS:

$(".grid.info").click(function() { 
    $('.zoom').toggleClass($(this).data("class")); 
}); 
+0

Не забывайте кавычки вокруг параметров атрибуту 'class'. – Barmar

+0

+1 Использование атрибута data устранит проблему порядка. Однако ваш ответ отсутствует, чтобы удалить ранее добавленный класс, но он получает общую идею. – Nope

+0

@ FrançoisWahl В вопросе ничего не говорится об удалении классов без щелчков div. – Barmar

0

В то время как вы уже приняли ответ, я был заинтригован потенциал решения вашей проблемы, поэтому я пришел с этим:

$('.grid').click(function(){ 
    var theClass = /(a\d)/.exec(this.className).shift(), 
     curClass = /(a\d)/.exec($('.zoom').get(0).className), 
     exClass = curClass !== null ? curClass.shift() : ''; 
    console.log(theClass === exClass); 
    if (exClass == theClass) { 
     $('.zoom').removeClass(theClass); 
    } 
    else { 
     $('.zoom') 
     .removeClass(exClass) 
     .addClass(theClass); 
    } 
}); 

JS Fiddle demo.

Ссылки:

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