Revision: 89785
Updated Code
at July 31, 2022 01:04 by pmw57
Updated Code
function hasClass(el, className) {
var regEx = new RegExp("(^|\\s)" + className + "(\\s|$)");
return el.className.match(regEx) !== null;
}
function addClass(el, className) {
if (hasClass(el, className)) {
return el;
}
if (!el.className) {
el.className = className;
} else {
el.className = el.className + " " + className;
}
return el;
}
function removeClass(el, className) {
var regEx = new RegExp("(^|\\s)" + className + "(\\s|$)");
var newClass = el.className.replace(regEx, " ");
if (hasClass(el, className)) {
el.className = newClass.replace(/^\s+|\s+$/g, "");
}
return el;
}
// What follows are a number of tests to ensure that the above functions work as expected.
function makeEl(classNames) {
var el = document.createElement("div");
el.className = classNames;
return el;
}
var classes = "apple banana carrot";
console.assert(makeEl("").className === "", "should be empty");
console.assert(makeEl(classes).className === classes, "should have classes");
console.assert(hasClass(makeEl(""), "apple") === false, "shouldn't have apple");
console.assert(hasClass(makeEl(classes), "apple"), "should have apple");
console.assert(hasClass(makeEl(classes), "banana"), "should have banana");
console.assert(hasClass(makeEl(classes), "carrot"), "should have carrot");
console.assert(hasClass(makeEl(classes), "app") === false, "shouldn't have app");
console.assert(addClass(makeEl(""), "apple").className === "apple", "should be apple");
console.assert(addClass(makeEl(classes), "date").className === "apple banana carrot date", "should have date");
console.assert(removeClass(makeEl(""), "").className === "", "should be empty");
console.assert(removeClass(makeEl(""), "apple").className === "", "can't remove what isn't there");
console.assert(removeClass(makeEl(classes), "").className === classes, "can't remove nothing");
console.assert(removeClass(makeEl(classes), "app").className === classes, "shouldn't remove what isn't there");
console.assert(removeClass(makeEl(classes), "apple").className === "banana carrot", "shouldn't have apple");
console.assert(removeClass(makeEl(classes), "banana").className === "apple carrot", "shouldn't have banana");
console.assert(removeClass(makeEl(classes), "carrot").className === "apple banana", "shouldn't have carrot");
Revision: 89784
Updated URL
Updated Code
Updated Description
at July 31, 2022 01:02 by pmw57
Updated URL
Updated Code
function hasClass(el, className) {
var regEx = new RegExp("(^|\\s)" + className + "(\\s|$)");
return el.className.match(regEx) !== null;
}
function addClass(el, className) {
if (hasClass(el, className)) {
return el;
}
if (!el.className) {
el.className = className;
} else {
el.className = [el.className, className].join(" ");
}
return el;
}
function removeClass(el, className) {
var regEx = new RegExp("(^|\\s)" + className + "(\\s|$)");
var newClass = el.className.replace(regEx, " ");
if (hasClass(el, className)) {
el.className = newClass.replace(/^\s+|\s+$/g, "");
}
return el;
}
// What follows are a number of tests to ensure that the above functions work as expected.
function makeEl(classNames) {
var el = document.createElement("div");
el.className = classNames;
return el;
}
var classes = "apple banana carrot";
console.assert(makeEl("").className === "", "should be empty");
console.assert(makeEl(classes).className === classes, "should have classes");
console.assert(hasClass(makeEl(""), "apple") === false, "shouldn't have apple");
console.assert(hasClass(makeEl(classes), "apple"), "should have apple");
console.assert(hasClass(makeEl(classes), "banana"), "should have banana");
console.assert(hasClass(makeEl(classes), "carrot"), "should have carrot");
console.assert(hasClass(makeEl(classes), "app") === false, "shouldn't have app");
console.assert(addClass(makeEl(""), "apple").className === "apple", "should be apple");
console.assert(addClass(makeEl(classes), "date").className === "apple banana carrot date", "should have date");
console.assert(removeClass(makeEl(""), "").className === "", "should be empty");
console.assert(removeClass(makeEl(""), "apple").className === "", "can't remove what isn't there");
console.assert(removeClass(makeEl(classes), "").className === classes, "can't remove nothing");
console.assert(removeClass(makeEl(classes), "app").className === classes, "shouldn't remove what isn't there");
console.assert(removeClass(makeEl(classes), "apple").className === "banana carrot", "shouldn't have apple");
console.assert(removeClass(makeEl(classes), "banana").className === "apple carrot", "shouldn't have banana");
console.assert(removeClass(makeEl(classes), "carrot").className === "apple banana", "shouldn't have carrot");
Updated Description
Standard hasClass, addClass, and removeClass functions. - reworked so that jsLint is happy about them - removeClass function trims things after removing a class name - tests help to ensure that all common use-cases are covered
Revision: 59519
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at September 13, 2012 18:25 by pmw57
Initial Code
function hasClass(ele, cls) {
return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
}
function addClass(ele, cls) {
if (!hasClass(ele, cls)) {
ele.className += ' ' + cls;
}
}
function removeClass(ele, cls) {
if (hasClass(ele, cls)) {
var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)'),
newClass = ele.className.replace(reg, ' ');
ele.className = newClass.replace(/^\s+|\s+$/g, '');
}
}
Initial URL
Initial Description
Standard hasClass, addClass, and removeClass functions, reworked so that jsLint is happier about them, and fixed the removeClass function so that things are trimmed after removing a class name.
Initial Title
Class handling functions
Initial Tags
javascript, js, class
Initial Language
JavaScript