That is how it works Liam !!! jQuery does not knows, it's told so... ---- Read jQuery HowTo Resource - http://jquery-howto.blogspot.com
On Tue, Feb 24, 2009 at 6:49 PM, Liam Potter <radioactiv...@gmail.com> wrote: > > ok, but what in jquery knows that $("p", $("#foo")) should look for the p > tags inside of #foo, why does it treat it like $("#foo p")? > > jQuery Lover wrote: >> >> Liam, you can use $("p", "#foo"). The second parameter must be a >> jQuery object or dom element... >> >> ---- >> Read jQuery HowTo Resource - http://jquery-howto.blogspot.com >> >> >> >> On Tue, Feb 24, 2009 at 6:44 PM, Liam Potter <radioactiv...@gmail.com> >> wrote: >> >>> >>> Hi Stehpan :p >>> >>> I understand that, I'm just not sure why $("p", $("#foo")) is not the >>> same >>> as $("p", "#foo") >>> >>> - Liam >>> >>> Stephan Veigl wrote: >>> >>>> >>>> Hi Lima, >>>> >>>> 1) #foo is an ID and since IDs should be unique there has to bee only >>>> one #foo element >>>> >>>> 2) $("p", $("#foo")) selects all <p> elements in the scope of the #foo >>>> element. >>>> In other words, it selects every <p> element under #foo in the DOM tree. >>>> >>>> by(e) >>>> Stephan >>>> >>>> 2009/2/24 Liam Potter <radioactiv...@gmail.com>: >>>> >>>> >>>>> >>>>> I've been following this discussion, but I need explaining why $("p", >>>>> $("#foo")) doesn't select all p tags and all #foo id's ? >>>>> >>>>> Stephan Veigl wrote: >>>>> >>>>> >>>>>> >>>>>> Hi, >>>>>> >>>>>> I've done some profiling on this, and $("p", $("#foo")) is faster than >>>>>> $("#foo p") in both jQuery 1.2.6 and 1.3.2. >>>>>> >>>>>> the test HTML consists of 100 <p>s in a "foo" <div> and 900 <p>s in a >>>>>> "bar" <div>. >>>>>> >>>>>> However the factor differs dramatically: >>>>>> In 1.2.6 the speedup from $("p", $("#foo")) to $("#foo p") was between >>>>>> 1.5x (FF) and 2x (IE), >>>>>> while for 1.3.2 the speedup is 20x (FF) and 15x (IE). >>>>>> >>>>>> $("p", $("#foo")) is faster in 1.3.2, by a factor of 1.5 (both FF and >>>>>> IE), >>>>>> while $("#foo p") is _slower_ in 1.3.2 by 8.5x (FF) and 4.6x (IE). >>>>>> >>>>>> Even with an empty "bar" div $("p", $("#foo")) is faster by a factor >>>>>> up >>>>>> to >>>>>> 3x. >>>>>> >>>>>> Conclusion: >>>>>> If you have an ID selector, first get the element by it's ID and use >>>>>> it as scope for further selects. >>>>>> >>>>>> by(e) >>>>>> Stephan >>>>>> 2009/2/23 ricardobeat <ricardob...@gmail.com>: >>>>>> >>>>>> >>>>>> >>>>>>> >>>>>>> up to jQuery 1.2.6 that's how the selector engine worked (from the >>>>>>> top >>>>>>> down/left to right). The approach used in Sizzle (bottom up/right to >>>>>>> left) has both benefits and downsides - it can be much faster on >>>>>>> large >>>>>>> DOMs and some situations, but slower on short queries. I'm sure >>>>>>> someone can explain that in better detail. >>>>>>> >>>>>>> Anyway, in modern browsers most of the work is being delegated to the >>>>>>> native querySelectorAll function, as so selector performance will >>>>>>> become more of a browser makers' concern. >>>>>>> >>>>>>> - ricardo >>>>>>> >>>>>>> On Feb 23, 1:08 pm, Peter Bengtsson <pete...@gmail.com> wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> I watched the John Resig presentation too and learned that CSS >>>>>>>> selectors always work from right to left. >>>>>>>> That would mean that doing this:: >>>>>>>> >>>>>>>> $('#foo p') >>>>>>>> >>>>>>>> Would extract all <p> tags and from that list subselect those who >>>>>>>> belong to #foo. Suppose you have 1000 <p> tags of them only 100 are >>>>>>>> inside #foo you'll have wasted 900 loops. >>>>>>>> >>>>>>>> Surely $('#foo') is the fastest lookup possible. Doing it this way >>>>>>>> will effectively limit the scope of the $('p') search and you will >>>>>>>> never be bothered about any <p> tags outside #foo. >>>>>>>> >>>>>>>> Or am I talking rubbish? >>>>>>>> >>>>>>>> >>>>>>>> >