]> 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:58:00 +0000 (17:58 +0200)
src/attributes/classes.js

index f4cdb88a3df66a14b28cfd835c01e8031079ff74..6ac81392d72ba3d2ff35f07e2b5687b59678c76b 100644 (file)
@@ -8,7 +8,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;
@@ -37,8 +37,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;
+                                       }
                                }
                        }
                }
@@ -47,7 +51,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;
@@ -76,7 +80,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;
+                                       }
                                }
                        }
                }