- From: Xidorn Quan <quanxunzhen@gmail.com>
- Date: Tue, 3 Sep 2013 10:00:39 +0800
- To: Simon Sapin <simon.sapin@exyr.org>
- Cc: www-style@w3.org
On Tue, Sep 3, 2013 at 12:38 AM, Simon Sapin <simon.sapin@exyr.org> wrote: > Le 31/08/2013 08:10, Xidorn Quan a écrit : > >> Hi all, >> >> I am new here. I have a suggestion for selecting parent elements. >> >> In the current draft, a new mechanism is introduced to change the >> subjects of a complex selector, which is prepending (or appending) >> exclamation mark, so that an element can be selected according to its >> descendents. >> >> But IMHO, it is not a flexible way to do so. Sometimes we may want to >> select not the elements with specified descendents themselves, but the >> elements related to them, like preceding, descending, etc. Consider >> the following document: >> >> <UL> >> <LI> >> <LI><UL></UL> >> <LI> >> </UL> >> >> It is not possible for current selectors4 definition to write a >> selector to represent LIs which follow a LI who has an UL inside. >> There are many similar cases. > > > :matches() to the rescue: > > li:matches(*! ul) ~ li I found that in the overview table, :matches only accepts compound selector as its arguments, so I didn't know this usage. However, after I checked the details, I found that :matches accepting complex selector requires complete profile, which might not be implemented for CSS for performance reason. It is not acceptable to me. I believe that :matches which supports complete complex selector is hard, if not impossible, to be implemented in a fast way, but it is possible for the pseudo-class I requested which narrows the looking-up range to its descendents. >> However, if we use pesudo-class instead, like :contains() or >> :has-child(), the problem can be solved. For the example above, we can >> use "LI:has-child(UL)~LI" to select the elements required. >> >> IMO, this kind of notation looks more intuitive, and won't introduce >> new symbols to complexify the grammar. And we would not need to worry >> about whether the mark should be prepended or appended anymore. Just >> drop it. >> >> What do you think about this idea? > > :has-child() seems less general than the subject indicator. Isn’t it? I don't think so. :has-child() might seem to be confusing. :has() or :contains() should be a better name. The pseudo-class :-hitch-has() in hitchjs.com mentioned by Brian Kardell has exactly the same function I wanted. You may want to check it out: http://hitchjs.com/describe/native.html#has
Received on Tuesday, 3 September 2013 02:01:47 UTC