]> source.dussan.org Git - jquery.git/commitdiff
Fix #14164: assign className in addClass/removeClass only if changed. Close gh-1331.
authorJeremy Dunck <jdunck@gmail.com>
Mon, 19 Aug 2013 15:55:05 +0000 (17:55 +0200)
committerMichał Gołębiowski <m.goleb@gmail.com>
Mon, 19 Aug 2013 15:55:49 +0000 (17:55 +0200)
src/attributes/classes.js

index 170787c83b790fff5d0f52425159d6ca20d6de63..aed8db88afc3f7d0ba6b96294f116db9b67a76f5 100644 (file)
@@ -9,7 +9,7 @@ var rclass = /[\t\r\n\f]/g;
 
 jQuery.fn.extend({
        addClass: function( value ) {
-               var classes, elem, cur, clazz, j,
+               var classes, elem, cur, clazz, j, finalValue,
                        i = 0,
                        len = this.length,
                        proceed = typeof value === "string" && value;
@@ -38,8 +38,12 @@ jQuery.fn.extend({
                                                        cur += clazz + " ";
                                                }
                                        }
-                                       elem.className = jQuery.trim( cur );
 
+                                       // only assign if different to avoid unneeded rendering.
+                                       finalValue = jQuery.trim( cur );
+                                       if ( elem.className !== finalValue ) {
+                                               elem.className = finalValue;
+                                       }
                                }
                        }
                }
@@ -48,7 +52,7 @@ jQuery.fn.extend({
        },
 
        removeClass: function( value ) {
-               var classes, elem, cur, clazz, j,
+               var classes, elem, cur, clazz, j, finalValue,
                        i = 0,
                        len = this.length,
                        proceed = arguments.length === 0 || typeof value === "string" && value;
@@ -77,7 +81,12 @@ jQuery.fn.extend({
                                                        cur = cur.replace( " " + clazz + " ", " " );
                                                }
                                        }
-                                       elem.className = value ? jQuery.trim( cur ) : "";
+
+                                       // only assign if different to avoid unneeded rendering.
+                                       finalValue = value ? jQuery.trim( cur ) : "";
+                                       if ( elem.className !== finalValue ) {
+                                               elem.className = finalValue;
+                                       }
                                }
                        }
                }