Re: Behavior of matches() and closest() with :scope()

Sean Hogan <[email protected]>
Newsgroups gmane.comp.web.dom.general,gmane.comp.web.css.general
Message-ID <[email protected]>
On 23/09/14 5:32 PM, Anne van Kesteren wrote:
> On Mon, Sep 22, 2014 at 11:54 AM, Sean Hogan <[email protected]> wrote:
>> No. I am also saying that if there is no explicit scope reference node
>> passed in then the implied scope reference node is document (or some
>> equivalent for elements not in document). I believe that currently the
>> implied scope reference node is the element itself.
>>
>> Currently:
>>      E.matches(':scope') -> true
>>      E.matches(':scope ul li') -> false
>>
>> Should be:
>>      E.matches(':scope') -> false
>>      E.matches(':scope ul li') -> true if E.matches('ul li') is true
> Why would that be better? As far as the :scope pseudo-element is
> concerned, the current semantics seem much more intuitive. I could see
> how you maybe want to rebind :scope, or restrict the tree traversed,
> but not why you want to change the way :scope works.
>
>

     E.matches(':scope')
     E.closest(':has(:scope)')
are not selectors anyone would write.
They do not have to be useful.

They should be consistent. e.g.
     A.query(':scope > li > a[href]').matches(':scope > li > a[href]', 
A); // potentially true
     document.query(':scope body').matches(':scope body'); // probably true

Scoping is defining a boundary (not a reference node).
In the DOM, a single node can define a boundary for all the nodes 
*below* it.
That's why in
     A.queryAll(':scope > li > a[href]')
     A.queryAll('> li > a[href]')
the scope is naturally A, because queryAll() can find all nodes *below* A.

Similarly in
     document.queryAll(':scope body')
the scope is naturally document because it can find all nodes *below* 
document.

SImilarly in
     E.closest(':scope > li > a[href]', A);
the scope is naturally A, because the search can find an element *below* A.

Similarly in
     E.closest('li > a[href]')
the scope is naturally *document* because the search can find an element 
*below* document.

This is the same in
     E.closest(':scope body')
where the scope is document.

Similarly it follows that in
     E.matches(':scope > li > a[href], A);
the scope is A.

Similarly it follows that in
     E.matches(':scope body')
the scope is document.

If there is a need for for pseudo-class in E.matches() that references 
E, then it should be a new pseudo-class, say :ref-node.

regards,
Sean
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.