Bug Tracker

Ticket #1733: 1733.diff

File 1733.diff, 2.5 kB (added by brandon, 1 year ago)

Patch + Tests for text nodes in jQuery.className methods

  • test/unit/core.js

     
    926926}); 
    927927 
    928928test("addClass(String)", function() { 
    929     expect(1); 
     929    expect(2); 
    930930    var div = $("div"); 
    931931    div.addClass("test"); 
    932932    var pass = true; 
     
    934934     if ( div.get(i).className.indexOf("test") == -1 ) pass = false; 
    935935    } 
    936936    ok( pass, "Add Class" ); 
     937    ok( !$('<span>test</span>\n<span>test</span>').addClass('test').eq(1).hasClass('test'), 'Test addClass with text nodes' ); 
    937938}); 
    938939 
    939940test("removeClass(String) - simple", function() { 
    940     expect(3); 
     941    expect(4); 
    941942    var div = $("div").addClass("test").removeClass("test"), 
    942943        pass = true; 
    943944    for ( var i = 0; i < div.size(); i++ ) { 
     
    957958    reset(); 
    958959    var div = $("div:eq(0)").addClass("test").removeClass(""); 
    959960    ok( div.is('.test'), "Empty string passed to removeClass" ); 
    960      
     961    ok( !$('<span>test</span>\n<span>test</span>').addClass('test').removeClass('test').eq(1).hasClass('test'), 'Test removeClass with text nodes' ); 
    961962}); 
    962963 
    963964test("toggleClass(String)", function() { 
  • src/core.js

     
    687687        // internal only, use addClass("class") 
    688688        add: function( elem, classNames ) { 
    689689            jQuery.each((classNames || "").split(/\s+/), function(i, className){ 
    690                 if ( !jQuery.className.has( elem.className, className ) ) 
     690                if ( elem && elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) 
    691691                    elem.className += (elem.className ? " " : "") + className; 
    692692            }); 
    693693        }, 
    694694 
    695695        // internal only, use removeClass("class") 
    696696        remove: function( elem, classNames ) { 
    697             elem.className = classNames != undefined ? 
    698                 jQuery.grep(elem.className.split(/\s+/), function(className){ 
    699                     return !jQuery.className.has( classNames, className );   
    700                 }).join(" ") : 
    701                 ""; 
     697            if ( elem && elem.nodeType == 1 ) 
     698                elem.className = classNames != undefined ? 
     699                    jQuery.grep(elem.className.split(/\s+/), function(className){ 
     700                        return !jQuery.className.has( classNames, className );   
     701                    }).join(" ") : 
     702                    ""; 
    702703        }, 
    703704 
    704705        // internal only, use is(".class") 
    705706        has: function( elem, className ) { 
    706             return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; 
     707            return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; 
    707708        } 
    708709    }, 
    709710