2016-04-12 20 views
2

Javascript'te yeni. Bir 'animasyonlu fadeInLeft' sınıfı bir görüntüye eklemek istediğimde, div etrafında bir 'active' sınıfı var ve 'active' sınıfını kaybettiğinde 'animated fadeInLeft' sınıfını kaldır. Bir şekilde düzgün çalışmıyor.Javascript: eğer hasClass daha sonra addClass

<div class="section" id="section1"> 
    <h2>Wireless Digital Music System</h2> 
    <p>Streaming tracks</p> 
    <img id="blueleft" class="blueleft" src="img/blueleft.png" alt="blueleft"> 
    <img id="blueright" class="blueright" src="img/blueright.png" alt="blueright"> 
</div> 

Başka JavaScript komut dosyası çalıştıran var, bir div bölümüne 'aktif' sınıfı katacak: Burada

<script> 
    $(document).ready(function() { 
    if ($('#section1').hasClass('active')) { 
     $('#blueleft').addClass('animated fadeInLeft'); 
    } 
    else { 
     $('#blueleft').removeClass("animated fadeInLeft"); 
    } 
    }); 
</script> 

HTML:

İşte javascript kodudur. Bununla bir problem yok. '# Section1' yerine 'div.section' yazmayı tercih edersem, tüm betik çalışır ve '#blueleft' sınıfını ekleyecektir. Ben bunu bir animatör göstereceğim, çünkü animated.css kullanıyorum. Ama '# section1' koyarsam işe yaramaz. 'Animated fadeInLeft' sınıfını eklemez. Sınıf yerine kimlik kullanmam gerekiyor çünkü 'bölüm' sınıf adına sahip başka div'larım var, ancak farklı kimlikleri var. Sorunun ne olabileceğini bilen var mı?

+0

bunu çalıştırır böylece 'removeClass' da mevcut değildir ne sınıfları kaldırmak için, –

+0

' # section1' bir 'active' sınıfı yok div bölüme aktif sınıfını ekleyerek başka javascript kodu yapıştırabilirsiniz. Ne olmasını bekliyorsun? Yinelenen ID'leriniz olabileceği gibi, geçersiz olan ve yalnızca ilkinin seçilmesi gibi. –

+0

'div class =" section active "id =" section1 "> –

cevap

-2
if($("div#section1.active").length){ 
    $('#blueleft').addClass('animated fadeInLeft'); 
} else { 
} 
+2

Fark yaratan bu oyunda yaptığınız değişiklikler neden yapılmalı? – Quentin

0

aynı kimliğe sahip birden div yaşıyorsanız, bu geçersiz HTML ise ve $ ('# elementID') ile öğeye erişmek, HTML olarak bulunan tek ilk elemanını döndürür sorun yani Eğer

$('div[id^="section1"]').each(function(){ 
    if ($(this).hasClass('active')) { 
     $(this).find('#blueleft').addClass('animated fadeInLeft'); 
    }else { 
     $(this).find('#blueleft').removeClass("animated fadeInLeft"); 
    } 
}) 

bu

section1 kimlikli tüm eleman bulacak ve mantık geçerli olacaktır aşağıdaki gibi her döngü için kullanmak gerekir.

+0

"Aynı kimliğe sahip birden çok div sahibi olduğunuz için" - Bunu düşünmenizi sağlayan nedir? Soru kodda yinelenen kimlikleri göstermez ve kimlikteki bir sayının kullanılması, kimliklerin benzersiz olduğunu gösterir. – Quentin

+0

@Quentin Sorguda, '' section '** olarak da adlandırılan başka ** diğer div'lara sahip olduğunu belirtmiştir. Bu yüzden, her bir döngü için birden fazla div ile aynı kimliğe sahip olması gerektiğini düşünmüştüm. Teşekkürler. –

+0

Bu kod, "section" öğesinin ** class ** adı değil ** id ** – Quentin