🧊

jQueryでadd/removeClassする前にhasClassすべきか

ちょうど気になってたので調べてみました。

結論からいうと、しなくて良いみたい。

気になるポイント

  • チェックしなくても、addClass/removeClassしてくれるっぽいしいらないのでは
  • でもclassNameに値入れるってことは、再レンダリングされちゃうのでは
  • 値入れるのはコスト高なイメージあるので、できれば避けるべきでは

ってとこかな?

肝心のソース

/**
 * Source code from v2.1.1
 *
 */

addClass: function( value ) {
    var classes, elem, cur, clazz, j, finalValue,
        proceed = typeof value === "string" && value,
        i = 0,
        len = this.length;

    if ( jQuery.isFunction( value ) ) {
        return this.each(function( j ) {
            jQuery( this ).addClass( value.call( this, j, this.className ) );
        });
    }

    if ( proceed ) {
        // The disjunction here is for better compressibility (see removeClass)
        classes = ( value || "" ).match( rnotwhite ) || [];

        for ( ; i < len; i++ ) {
            elem = this[ i ];
            cur = elem.nodeType === 1 && ( elem.className ?
                ( " " + elem.className + " " ).replace( rclass, " " )