W3C home > Mailing lists > Public > www-style@w3.org > April 2008

Re: [attr|=""] Selector

From: Alan Gresley <alan@css-class.com>
Date: Fri, 04 Apr 2008 03:45:00 +1100
Message-ID: <47F5098C.9040700@css-class.com>
To: Bert Bos <bert@w3.org>
CC: www-style@w3.org

Bert Bos wrote:


 > If we're talking about the same "they," I think they'd have no clue
 > what you're talking about :-) And if they do, they probably don't
 > agree with you. "abc" doesn't start with "abc", because they are the
 > same.
 >
 > I tried asking some people if "abcd" starts with "abcd" and if "abcd"
 > starts with "", but I didn't even get beyond the question if "abcd"
 > starts with "ab". They didn't understand what "abcd" and "ab" meant
 > and thus couldn't answer the question.


Before I proceed I would like to suggest that we look at what att^=val 
and att$=val really mean. From the specs.

http://www.w3.org/TR/css3-selectors/#attribute-substrings

We see that:

[att^=val] Represents an element with the att attribute whose value 
begins with the prefix "val".


A prefix could also be like "onlist" or "on-list". The prefix is "on"


[att$=val] Represents an element with the att attribute whose value ends 
with the suffix "val".

A suffix could be like "closed". But the suffix here is not "ed" but 
rather "d" since the word is "close". att$=val can not work like this.


Maybe the wording in the specs can be misleading since it may cause some 
to associate prefixes and suffixes with written grammar. Lets rewords 
these specs slightly.


[att^=val] Represents an element with the att attribute whose value 
begins with or is equals to "val".

[att$=val] Represents an element with the att attribute whose value ends 
with or is equals to "val".


So "abcd" starts with "abcd", "abc", "ab", and "a" and "abcd" also ends 
with "abcd", "bcd", "cd", and "d" but in both cases "abcd" also equals 
"abcd"


Then we have:

[att*=val] Represents an element with the att attribute whose value 
contains at least one instance of the substring "val".


So "abcd" can equal "abcd", "abc", "ab", "a" and "d", "cd", "bcd" and 
also "bc". There is also something else there but very hidden. It occurs 
three times in "abcd" between "ab", "bc" and "cd" and it value is "". 
The empty string so infinitely small that we can not measure it. Any 
scientist should know that "" could represent something but for them "" 
just represent zero since they haven't been equipped with the tools to 
measure infinitely small empty spaces.


It get even more crazy when whitespace or a hyphen appears.

.a[class*=""] class="a b-c-d"

.a[class*=" "] class="a b-c-d"

.a[class*="-"] class="a b-c-d"

So val can equal "a b-c-d" but also " " and "-" even though we are 
testing against class="a". If we dropped the class and just have.

[class*=""]

this would also mean that "" also equals class="".


 > One who tried considered that "abcd" starts with "a...". And also
 > considered that "Jean" starts with "je". She recognized in "" a
 > philosophical problem about the infinite and the , but
 > didn't know how to answer the question.


Your not making reference to SaFari there are you? :-)

I scientist must have a test that can be repeated over and over before 
something is deemed real. Thorough and exhausting testing must be done 
before a theory can considered a fact. The fact is known for us that "" 
equals something so infinitely small that we can't even articulate it 
(even too a scientist) but also it equal everything. The only difference 
is we can limit what "" does equal too by att=val, att~=val, att|=val.



 >> which is also how XPath handles the issue
 >> (the empty string is a substring of any string, so any string starts
 >> with and ends with it). The analogous of [example~=""] does not match
 >> be- cause the empty string is not a token so it cannot be in the
 >> token set.
 >
 > As I said, I don't care what we define, either way will be non-intuitive
 > to some people. But I'd rather not have to explain one point of view
 > and its opposite at the same time. People will accept it, but they'll
 > think we're nuts.


About att~="", att|~"" and att=val they can only equal a HTML attribute 
that has an empty string like class="". The attribute presence and value 
selectors are very different to substring attribute matching selectors.

I have just found this.

http://en.wikipedia.org/wiki/Empty_string

The "empty string: is all allowable in C, C++, Perl, Python and C# and 
is represented as {'\0'}, "", '', qw(), str(), string.Empty.


 > If programmers prefer that starts-with(x, x) is true for all strings x,
 > I'm fine with taking that as a principle and explaining to other people
 > that "" is a prefix is of everything, because, well, we had to define
 > it one way or the other and this was easiest for programmers. But then
 > we'll have to change our resolution on the issue again.
 >
 >
 >
 > Bert


We have att^val, att$=val, att*=val which can equal nothing, everything 
or something infinitely small. I will provide this link before some of 
us are go nuts.

http://en.wikipedia.org/wiki/Image:Ninedots-1.png

The challenge is to connect the dots by drawing four straight, 
continuous lines, and never lifting the pencil from the paper.


Whoever does not know of this famous test, please give it a try. I gave 
the same test to my Father and Son and an hour later after I have given 
them many hints, their logical thinking brain could work out how to do 
it. The logical brain will in a split second click in with a limiter 
(preconception) that blocks the path to the solution. The solution is 
below but before clicking the link see if you can see a "big clue" for 
the solution in the link.

http://en.wikipedia.org/wiki/Thinking_outside_the_box


Ok, I must go at this point and work on some more test. :-)


Alan

http://css-class.com/test/
Received on Thursday, 3 April 2008 16:46:46 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 27 April 2009 13:55:04 GMT