javascript - Loop through divs and toggle class if another class exists -
i want toggle class (and make text blink using interval) if class found.
css
.flash { color: #dc4900; }
html
<div class="text notify">flash</div> <div class="text notify">flash</div> <div class="text">don't flash</div>
js
$(document).ready(function() { $('.text').each(function() { if ($(this).hasclass('notify')) { setinterval(function() { $(this).toggleclass('flash'); }, 1000); } }); });
https://jsfiddle.net/s9dv9qv3/
the interval not working should. should adding flash class text if class notify found.
inside of setinterval
callback, this
refers window
object.
to work around this, 1 option capture reference this
outside of callback:
$('.text.notify').each(function() { var self = this; setinterval(function() { $(self).toggleclass('flash'); }, 1000); });
i removed check notify
class since can select elements directly.
alternatively, use .bind()
method set value of this
:
$('.text.notify').each(function() { setinterval(function() { $(this).toggleclass('flash'); }.bind(this), 1000); });
as side note, since you're toggling class on of elements @ same time, use:
setinterval(function() { $('.text.notify').toggleclass('flash'); }, 1000);
if want set delay, add timeout based on current index of .each()
loop:
$('.text.notify').each(function(i) { var self = this; settimeout(function() { setinterval(function() { $(self).toggleclass('flash'); }, 1000); }, 1000 * i); });
lastly, can avoid jquery , use infinite css3 animation:
.text.notify { animation: flash 2s infinite; } @keyframes flash { 0%, 49% { color: #000; } 50%, 100% { color: #dc4900; } }
<div class="text notify">flash</div> <div class="text notify">flash</div> <div class="text notify">flash</div> <div class="text notify">flash</div> <div class="text">don't flash</div>
Comments
Post a Comment