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