javascript - is(':first') returns different (wrong?) results for what should be the same element. jsFiddle inside -
http://jsfiddle.net/garnwraly/sfrwu/2/
given html of only
<li> <button id="bam">click</button> </li>
and script
$('body').on('click', 'button', function (e) { //console.log( e.currenttarget == $('button')[0] ); //true; //console.log($('li').is('li:first')); //true console.log($(e.currenttarget).parent().is('li:first')) //false console.log($('button').parent().is('li:first')); //true console.log($($('button')[0]).parent().is('li:first')); //false });
why $(e.currenttarget).parent().is('li:first')
false?
after step debugging through jquery code ran, turns out issue way jquery()
method used within is()
method. know, you can pass context method, , internally, context being used is()
method (and being set differently various selectors).
when $(e.currenttarget)
used, context set button triggered event. while when $('button')
used, context set document
object. makes sense when think of how these selectors need scoped.
here relevant part of is()
method:
jquery( selector, this.context ).index( this[0] ) >= 0
based on that, when run $(e.currenttarget), call jquery()
method evaluation to:
jquery("li:first", "button#bam").index( this[0] ) >= 0
which returning -1, , reporting false
Comments
Post a Comment