Re: [selectors-nonelement] ::attr(*|localname), ::attr(ns|*), and ::attr(*)

On Thu, Feb 27, 2014 at 9:08 AM, Jirka Kosek <jirka@kosek.cz> wrote:
> On 27.2.2014 17:53, Tab Atkins Jr. wrote:
>> Again, the inconsistency is internal.  "*", when used in type
>> selectors, is just a wildcard tagname.  It acts identically wrt
>> namespaces as a real tagname does.  "*", when used in ::attr(), should
>> work the same, and be identical to a real attribute name wrt
>> namespaces.
>>
>> Your suggestion is that "*" act *differently* than a normal attribute
>> name, so that it assumes "all namespaces" while a normal attribute
>> names assumes "the null namespace".
>
> But as there is already inconsistency between type selectors ("E"
> selects E elements in any namespace) and attribute selectors ("[A]"
> matches elements that have A attribute in no namespace)

That's due to default namespaces, not anything fundamental.  It's also
not an *internal* inconcistency - "E" and "*" both select using the
default namespace in type selectors, while attribute selectors don't
have a "*" at all, and so can't be inconsistent internally.

> I don't think
> that special treatment of "*" as wildcard in ::attr(*) will do any harm.
> After all this behaviour can be brought back to attribute selectors --
> "[*]" will match element that has at least one attribute.

If attribute selectors allowed "[*]", it would match an element with
at least one attribute *in the null namespace* (to be consistent with
the behavior of plain attribute names).  You'd have to write [*|*] to
select an element with any attribute whatsoever.

~TJ

Received on Thursday, 27 February 2014 17:27:10 UTC