{"ScriptPreparationCode":"function addClass(el, classNames)\r\n{\r\n if (!classNames) { return; }\r\n \r\n if (!Object.prototype.toString.call(classNames) === \u0022[object Array]\u0022)\r\n {\r\n classNames = classNames.split(\u0027 \u0027);\r\n }\r\n var className = el.getAttribute(\u0022class\u0022) || \u0022\u0022;\r\n \r\n var i, classMap = {}, currentClasses = [], length;\r\n \r\n if (className !== null)\r\n {\r\n currentClasses = className.split(\u0022 \u0022);\r\n \r\n length = currentClasses.length;\r\n for (i = 0; i \u003C length; i\u002B\u002B)\r\n {\r\n if (currentClasses[i] !== \u0022\u0022)\r\n {\r\n classMap[currentClasses[i]] = \u0022\u0022;\r\n }\r\n }\r\n }\r\n \r\n var changed = false, trimmedName;\r\n var newAdded = [];\r\n length = classNames.length;\r\n for (i = 0; i \u003C length; i\u002B\u002B)\r\n {\r\n trimmedName = classNames[i].trim();\r\n if ((trimmedName.length \u003E 0) \u0026\u0026 !(trimmedName in classMap))\r\n {\r\n currentClasses.push(trimmedName);\r\n newAdded.push(trimmedName);\r\n classMap[trimmedName] = \u0022\u0022;\r\n changed = true;\r\n }\r\n }\r\n \r\n if (changed)\r\n {\r\n el.setAttribute(\u0022class\u0022, currentClasses.join(\u0022 \u0022).trim());\r\n }\r\n \r\n return newAdded;\r\n}","TestCases":[{"Name":"addClass function","Code":"var element = document.getElementById(\u0022foo\u0022);\r\nvar i = 1000;\r\nwhile (i--) {\r\n\taddClass(element, \u0022bar\u0022);\r\n}","IsDeferred":false},{"Name":"classList","Code":"var element = document.getElementById(\u0022foo\u0022);\r\nvar i = 1000;\r\nwhile (i--) {\r\n\telement.classList.add(\u0022bar\u0022);\r\n}","IsDeferred":false}]}