From c418b94eb48188cd9329519ae5e030a52dd81cc9 Mon Sep 17 00:00:00 2001 From: Jeremy Dunck Date: Mon, 19 Aug 2013 17:55:05 +0200 Subject: [PATCH] Fix #14164: assign className in addClass/removeClass only if changed. Close gh-1331. --- src/attributes/classes.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/attributes/classes.js b/src/attributes/classes.js index 170787c83..aed8db88a 100644 --- a/src/attributes/classes.js +++ b/src/attributes/classes.js @@ -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; + } } } } -- 2.39.5