jQuery addClass example

Change class name on click in jQuery

by Abin Thaha Azeez

HTML

<div class="clock">
  <div class="hours">
    <div class="s-1">
      <div class="n-5">
        <time class="t-01"></time>
        <time class="t-02"></time>
        <time class="t-03"></time>
        <time class="t-04"></time>
        <time class="t-05"></time>
        <time class="t-06"></time>
        <time class="t-07"></time>
        <time class="t-08"></time>
        <time class="t-09"></time>
        <time class="t-10"></time>
        <time class="t-11"></time>
        <time class="t-12"></time>
        <time class="t-13"></time>
        <time class="t-14"></time>
        <time class="t-15"></time>
        <time class="t-16"></time>
        <time class="t-17"></time>
        <time class="t-18"></time>
        <time class="t-19"></time>
        <time class="t-20"></time>
        <time class="t-21"></time>
        <time class="t-22"></time>
        <time class="t-23"></time>
        <time class="t-24"></time>
      </div>
    </div>
    <div class="s-2">
      <div class="n-6">
        <time class="t-01"></time>
        <time class="t-02"></time>
        <time class="t-03"></time>
        <time class="t-04"></time>
        <time class="t-05"></time>
        <time class="t-06"></time>
        <time class="t-07"></time>
        <time class="t-08"></time>
        <time class="t-09"></time>
        <time class="t-10"></time>
        <time class="t-11"></time>
        <time class="t-12"></time>
        <time class="t-13"></time>
        <time class="t-14"></time>
        <time class="t-15"></time>
        <time class="t-16"></time>
        <time class="t-17"></time>
        <time class="t-18"></time>
        <time class="t-19"></time>
        <time class="t-20"></time>
        <time class="t-21"></time>
        <time class="t-22"></time>
        <time class="t-23"></time>
        <time class="t-24"></time>
      </div>
    </div>
  </div>
  <div class="minutes">
    <div class="s-1">
      <div class="n-5">
        <time class="t-01"></time>
        <time...

SCSS

.clock {
  padding: 40px;
  margin: 40px auto;
  width: calc(40px*8);
  font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;
  font-size: .8rem;
  color: #e83e8c;
  
  .h-1,
  .h-2,
  .m-1,
  .m-2,
  .s-1,
  .s-2 {
    margin-bottom: 0px;
    width: 50%;
    float: left;
    position: relative;
    &:before {
      content: "";
      padding-top: 150%;
      display: block;
    }
    >DIV {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
    }
  }
  TIME {
    /* clock */
    float: left;
    width: calc(40px);
    height: calc(40px);
    display: block;
    background: #eeeeee;
    border-radius: 50%;
    position: relative;
    
    SPAN {
      position: absolute;
    }
    
    /* the hands */
    &:before,
    &:after {
      border-radius: 1%;
      content: "";
      display: block;
      width: 2px;
      height: 50%;
      background: #424242;
      left: 50%;
      position: absolute;
      transform: translateX(-1px);
      transform-origin: center bottom;
      transition: all 1s;
    }
  }
}


// rotate
@mixin time($hr,$mi) {
 
  $hour : 360/12*$hr;
  $min : 360/60*$mi;

  &:before {
    transform: rotate(#{$hour}deg);
  }
  &:after {
    transform: rotate(#{$min}deg);
  }
  
}


.n-0 {
  .t-01 {
    @include time(6,15);
  }
  .t-02 {
    @include time(9,15);
  }
  .t-03 {
     @include time(9,15);
  }
  .t-04 {
    @include time(9,30);
  }
  .t-05 {
    @include time(12,30);
  }
  .t-06 {
    @include time(6,15);
  }
  .t-07 {
    @include time(9,30);
  }
  .t-08 {
    @include time(12,30);
  }
  .t-09 {
    @include time(12,30);
  }
  .t-10 {
    @include time(12,30);
  }
  .t-11 {
    @include time(12,30);
  }
  .t-12 {
    @include time(12,30);
  }
  .t-13 {
    @include time(12,30);
  }
  .t-14 {
    @include time(12,30);
  }
  .t-15 {
    @include time(12,30);
  }
  .t-16 {
    @include time(12,30);
  }
  .t-17 {
    @include time(12,30);
  }
  .t-18 {
   ...

JavaScript

// remove class regex
$.fn.removeClassRegEx = function(regex) {
    var classes = $(this).attr('class');
    if (!classes || !regex) return false;
    var classArray = [];
    classes = classes.split(' ');
    for (var i = 0, len = classes.length; i < len; i++)
        if (!classes[i].match(regex)) classArray.push(classes[i]);
    $(this).attr('class', classArray.join(' '));
};

let sec = 0,
	min = 0,
	hour = 0;

getValue();

var interval = setInterval(function() {
	getValue();
}, 1000);

function getValue() {
	var date = new Date();
 	sec = date.getSeconds();
 	min = date.getMinutes();
 	hour = date.getHours();

	sec = getSec(sec);
	min = getSec(min);
	hour = getSec(hour);
	
	setSec(sec);
	setMin(min);
	setHour(hour);
}

function setSec(val) {
	$('.seconds .s-1 > div, .seconds .s-2 > div').removeClassRegEx('n-');
	$('.seconds .s-1 > div').addClass('n-' + parseInt(val / 10));
	$('.seconds .s-2 > div').addClass('n-' + parseInt(val % 10));
}
function setMin(val) {
	$('.minutes .s-1 > div, .minutes .s-2 > div').removeClassRegEx('n-');
	$('.minutes .s-1 > div').addClass('n-' + parseInt(val / 10));
	$('.minutes .s-2 > div').addClass('n-' + parseInt(val % 10));
}
function setHour(val) {
	$('.hours .s-1 > div, .hours .s-2 > div').removeClassRegEx('n-');
	$('.hours .s-1 > div').addClass('n-' + parseInt(val / 10));
	$('.hours .s-2 > div').addClass('n-' + parseInt(val % 10));
}

function getSec(num) {
	if (num < 10 || num == 0) {
		num = '0' + num;
	} else if (num >= 60) {
		num = num % 60;
	}
	return num;
}