Commit 64902490 authored by Batiste Bieler's avatar Batiste Bieler Committed by jeresig

Enforce that hasClass and removeClass work even with tabs and endlines in...

Enforce that hasClass and removeClass work even with tabs and endlines in class attributes. Fixes #5505.
parent b4b30cc6
var rclass = /[\n\t]/g;
jQuery.fn.extend({ jQuery.fn.extend({
attr: function( name, value ) { attr: function( name, value ) {
return access(this, name, value, true, jQuery.attr); return access(this, name, value, true, jQuery.attr);
...@@ -49,7 +51,7 @@ jQuery.fn.extend({ ...@@ -49,7 +51,7 @@ jQuery.fn.extend({
if ( elem.nodeType === 1 && elem.className ) { if ( elem.nodeType === 1 && elem.className ) {
if ( value ) { if ( value ) {
var className = " " + elem.className + " "; var className = (" " + elem.className + " ").replace(rclass, " ");
for ( var c = 0, cl = classNames.length; c < cl; c++ ) { for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
className = className.replace(" " + classNames[c] + " ", " "); className = className.replace(" " + classNames[c] + " ", " ");
} }
...@@ -67,7 +69,7 @@ jQuery.fn.extend({ ...@@ -67,7 +69,7 @@ jQuery.fn.extend({
hasClass: function( selector ) { hasClass: function( selector ) {
var className = " " + selector + " "; var className = " " + selector + " ";
for ( var i = 0, l = this.length; i < l; i++ ) { for ( var i = 0, l = this.length; i < l; i++ ) {
if ( (" " + this[i].className + " ").indexOf( className ) > -1 ) { if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
return true; return true;
} }
} }
......
...@@ -427,23 +427,37 @@ test("removeAttr(Function)", function() { ...@@ -427,23 +427,37 @@ test("removeAttr(Function)", function() {
}); });
test("addClass, removeClass, hasClass", function() { test("addClass, removeClass, hasClass", function() {
expect(6); expect(14);
var jq = jQuery("<p>Hi</p>"), x = jq[0]; var jq = jQuery("<p>Hi</p>"), x = jq[0];
jq.addClass("hi"); jq.addClass("hi");
equals( x.className, "hi", "Check single added class" ); equals( x.className, "hi", "Check single added class" );
jq.addClass("foo bar"); jq.addClass("foo bar");
equals( x.className, "hi foo bar", "Check more added classes" ); equals( x.className, "hi foo bar", "Check more added classes" );
jq.removeClass(); jq.removeClass();
equals( x.className, "", "Remove all classes" ); equals( x.className, "", "Remove all classes" );
jq.addClass("hi foo bar"); jq.addClass("hi foo bar");
jq.removeClass("foo"); jq.removeClass("foo");
equals( x.className, "hi bar", "Check removal of one class" ); equals( x.className, "hi bar", "Check removal of one class" );
ok( jq.hasClass("hi"), "Check has1" ); ok( jq.hasClass("hi"), "Check has1" );
ok( jq.hasClass("bar"), "Check has2" ); ok( jq.hasClass("bar"), "Check has2" );
var jq = jQuery("<p class='class1\nclass2\tcla.ss3\n'></p>");
ok( jq.hasClass("class1"), "Check hasClass with carriage return" );
ok( jq.is(".class1"), "Check is with carriage return" );
ok( jq.hasClass("class2"), "Check hasClass with tab" );
ok( jq.is(".class2"), "Check is with tab" );
ok( jq.hasClass("cla.ss3"), "Check hasClass with dot" );
jq.removeClass("class2");
ok( jq.hasClass("class2")==false, "Check the class has been properly removed" );
jq.removeClass("cla");
ok( jq.hasClass("cla.ss3"), "Check the dotted class has not been removed" );
jq.removeClass("cla.ss3");
ok( jq.hasClass("cla.ss3")==false, "Check the dotted class has been removed" );
}); });
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment