I am nearly there, just a little unsure as to my code setup, I basically want to remove a class on click, and add it back again onclick, then remove onclick, then add onclic
If JQuery is okay for you it really is as simple as
$(myButton).toggleClass('active')
http://jsfiddle.net/bikeshedder/eRJB4/
Suggest common realization of toggleClass method:
function toggleClass(element, tClass) {
tClass = tClass.replace(/\s/g, "");
var classes = element.className;
element.className = classes.indexOf(tClass) !== -1
? classes.replace(" " + tClass, "")
: classes + " " + tClass;
}
using:
var element = document.getElementById('myId');
toggleClass(element, 'active');
I am really surprised nobody mentioned classList here. So just to be complete: Alternative solution would be to use classList method toggle().
Your case would then simply be:
document.getElementById('myButton').onclick = function() {
this.classList.toggle('active');
}
e.classList.toggle() has good support (except for, ehm, IE, It's there since IE10). Click here for complete browser compatibility.
Implementation using Array methods:
const toggleClass = (element, className) => {
let classNames = element.className.split(' ');
let index = classNames.indexOf(className);
if (index === -1) {
classNames.push(className);
} else {
classNames.splice(index, 1);
}
element.className = classNames.filter(item => item !== '').join(' ');
}
Usage:
let body = document.getElementsByTagName('body')[0];
toggleClass(body, 'ready');
Plunker
If you want to use a ternary operator, use this:
document.getElementById('myButton').onclick = function() {
var className = ' ' + myButton.className + ' ';
this.className = ~className.indexOf(' active ') ?
className.replace(' active ', ' ') :
this.className + ' active';
}
For clarity, I'd use a regular if/else:
document.getElementById('myButton').onclick = function() {
var className = ' ' + myButton.className + ' ';
if ( ~className.indexOf(' active ') ) {
this.className = className.replace(' active ', ' ');
} else {
this.className += ' active';
}
}
Here's the fiddle: http://jsfiddle.net/ttEGY/