Bug Tracker

Ticket #1727: 1727.diff

File 1727.diff, 1.4 KB (added by davidserduke, 14 years ago)

patch

  • src/selector.js

     
    349349                        // We can get a speed boost by handling nth-child here
    350350                        } else if ( m[1] == ":" && m[2] == "nth-child" ) {
    351351                                var merge = {}, tmp = [],
    352                                         test = /(\d*)n\+?(\d*)/.exec(
     352                                        // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
     353                                        test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
    353354                                                m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" ||
    354                                                 !/\D/.test(m[3]) && "n+" + m[3] || m[3]),
    355                                         first = (test[1] || 1) - 0, last = test[2] - 0;
     355                                                !/\D/.test(m[3]) && "0n+" + m[3] || m[3]),
     356                                        // calculate the numbers (first)n+(last) including if they are negative
     357                                        first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0;
    356358
     359                                // loop through all the elements left in the jQuery object
    357360                                for ( var i = 0, rl = r.length; i < rl; i++ ) {
    358361                                        var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);
    359362
     
    369372
    370373                                        var add = false;
    371374
    372                                         if ( first == 1 ) {
    373                                                 if ( last == 0 || node.nodeIndex == last )
     375                                        if ( first == 0 ) {
     376                                                if ( node.nodeIndex == last )
    374377                                                        add = true;
    375                                         } else if ( (node.nodeIndex + last) % first == 0 )
     378                                        } else if ( (node.nodeIndex - last) % first == 0 && (node.nodeIndex - last) / first >= 0 )
    376379                                                add = true;
    377380
    378381                                        if ( add ^ not )