Hi Lima,

taking a look at $("p", $("#foo")) you see that the second parameter
is a function: $("#foo").
This function is evaluated first and returns the jQuery object for #foo.
Then the surrounding $("p",...) function is called with the jQuery
object for #foo as second parameter.
The documentation of jQuery says, if $() is called with two
parameters, where the first one is a selector expression, than the
second parameter is the optional context the selector should be
executed in.

see http://docs.jquery.com/Core/jQuery#expressioncontext

by(e)
Stephan


2009/2/24 Liam Potter <radioactiv...@gmail.com>:
>
> lol, but I'm interested in what jquery does with what I tell it.
>
> jQuery Lover wrote:
>>
>> 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?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>

Reply via email to