7
votes

Y a-t-il une raison particulière pour laquelle JQuery's AddClass () n'est pas une coupe à droite?

$("#myDiv").addClass("carrot");

5 commentaires

Je suppose que cela a à voir avec la vitesse. Est-ce que cela provoque une erreur?


Cela ne devrait pas causer d'erreurs, alors cela compte vraiment?


C'est une question intéressante néanmoins.


Editeur: J'améliore votre jsfiddle pour une meilleure vue


FYI, il ne devrait être pas grave d'avoir un espace supplémentaire occasionnel entre les cours.


3 Réponses :


2
votes

Cela se passe parce que JQuery est également ajouté à la classe dans la liste des classes, puis en cours d'exécution garniture sur la chaîne entière.

Jetez un coup d'œil au source pour addclass < / code> pour voir ce qui se passe.


0 commentaires

7
votes

On dirait que JQuery fait la garniture après avoir ajouté la classe. Voir le code JQuery AddClass ci-dessous,

addClass: function( value ) {
    var classNames, i, l, elem,
        setClass, c, cl;

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

    if ( value && typeof value === "string" ) {
        classNames = value.split( rspace );

        for ( i = 0, l = this.length; i < l; i++ ) {
            elem = this[ i ];

            if ( elem.nodeType === 1 ) {
                if ( !elem.className && classNames.length === 1 ) {
                    elem.className = value;

                } else {
               //HERE IS APPENDS ALL CLASS IT NEEDS TO ADD
                    setClass = " " + elem.className + " ";

                    for ( c = 0, cl = classNames.length; c < cl; c++ ) {
                        if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
                            setClass += classNames[ c ] + " ";
                        }
                    }
                    elem.className = jQuery.trim( setClass );
                }
            }
        }
    }

    return this;
}


0 commentaires

0
votes

En regardant la source, je suppose qu'il n'y a aucune raison de cela:

setClass = " " + jQuery.trim(elem.className) + " ";


0 commentaires