Enforce that hasClass and removeClass work even with tabs and endlines in class attributes. Fixes #5505.
This commit is contained in:
parent
b4b30cc683
commit
649024909d
|
@ -1,3 +1,5 @@
|
||||||
|
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({
|
||||||
|
|
||||||
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({
|
||||||
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() {
|
||||||
});
|
});
|
||||||
|
|
||||||
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" );
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue