andy-h
10/27/2015 - 2:32 PM

Class name functions

Class name functions

function removeClass(elem){
    
    var classes, rxp;

    if(!elem){
        throw new Error("Missing parameter: elem");
    }

    classes = Array.prototype.slice.call(arguments, 1).join(" ").trim();
    
    if(!classes || !elem.className.trim()) return;
    
    if(!(/^$|^([a-z][a-z0-9_-]*)(\s+[a-z][a-z0-9_-]*)*$/i).test(classes)){
        throw new Error("Invalid class name(s)");
    }
    classes = classes.split(/\s+/).join("|");
    
    rxp = new RegExp("^\\s*(?:(?:"+classes+")(?:\\s+|$))+|(?:\\s+(?:"+classes+"))+(?:(\\s)\\s*|$)");
    
    elem.className = elem.className.replace(rxp, "$1").trim();
    
}

function addClass(elem){
    
    var classes, classesRxp, rxp;

    if(!elem){
        throw new Error("Missing parameter: elem");
    }

    classes = Array.prototype.slice.call(arguments, 1).join(" ").trim();
    
    if(!classes) return;
    
    if(!(/^([a-z][a-z0-9_-]*)(\s+[a-z][a-z0-9_-]*)*$/i).test(classes)){
        throw new Error("Invalid class name(s)");
    }
    classes = classes.split(/\s+/);
    classesRxp = classes.join("|");
    
    rxp = new RegExp("^\\s*(?:(?:"+classesRxp+")(?:\\s+|$))+|(?:\\s+(?:"+classesRxp+"))+(?:(\\s)\\s*|$)");
    
    elem.className = (elem.className.replace(rxp, "$1") + " "+classes.join(" ")).trim();
    
}

function hasClass(elem){
    
    var classes, i, rxp;
    
    if(!elem){
        throw new Error("Missing parameter: elem");
    }

    classes = Array.prototype.slice.call(arguments, 1).join(" ").trim();
    
    if(!classes || !elem.className.trim()) return false;
    
    if(!(/^([a-z][a-z0-9_-]*)(\s+[a-z][a-z0-9_-]*)*$/i).test(classes)){
        throw new Error("Invalid class name(s)");
    }
    classes = classes.split(/\s+/);
    
    for(i=0; i<classes.length; i++){
        rxp = new RegExp("(^|\\s)"+classes[i]+"(\\s|$)");
        if(!rxp.test(elem.className)) return false;
    }
    
    return true;

}