[whatwg] getElementsByClassName()
Lachlan Hunt
lachlan.hunt at lachy.id.au
Fri Feb 3 18:25:21 PST 2006
Jim Ley wrote:
> On 2/3/06, Michel Fortin <michel.fortin at michelf.com> wrote:
>> Le 2006-02-03 à 09:30, Jim Ley a écrit :
>> So to generalize the use case, when I want to attach an event to a
>> child element or an element linked by any other mean to the element
>> having that class, I can't use addEventListenerToClass.
>
> So this shows that addEventListenerToCSSSelector is really what you
> want so you can attach it to A's that are children of the class
> doesn't it?
I don't agree with that, there are many valid use cases for a
getElementsByClassName and while it is true that many of them are event
related, that doesn't mean they all are. For example, if an author
marked up dates in their document like this (due to the lack of a date
element)
<span class="date">2006-02-03T01:30Z</date>
A script could get all the elements with the class name of "date", parse
it and modify it to the user's preferred time zone and format. So, for
example, the script could change it to this for a typical Australian user:
<span class="date">03 Feb 2006 12:30 (local time)</span>
Whereas, an American user may get this instead:
<span class="date">Feb 02, 2006 20:30 (local time)</span>
Regarding the idea for addEventListenerToSelector, while I don't think
it should be implemented as a function like that, the idea of attaching
events based on a selector is quite reasonable. What if there was a way
to declaratively attach events to elements in the same way that the
on[event] attributes in HTML do, but with same level of abstraction
provided by CSS using selectors. It could even be used for some the
event-related use cases for getElementsByClassName, simply by using a
class selector.
Of course, there is XML Events, which also seems to be declarative, but
from what I know about it (not very much), it seems to be limited to
specifying IDs of the target/observer elements and putting IDs on every
target element is not always convenient; or otherwise embedding the
event attributes (like ev:handler, ev:event, etc) throughout the markup,
just like with the HTML on[event] attributes.
There's also IE's behaviours using HTCs and the proprietary 'behavior'
property in CSS, but it seems rather complex and HTCs look quite messy
(they seem to be a weird mixture of proprietary HTML with some XML
syntax), although perhaps they were on the right track with the concept
of making them declarative.
For example, using this CSS-like syntax (but it's not CSS).
selector {
event-name: function();
}
For example, using a real (rather nifty) javascript example, called Lightbox
http://www.huddletogether.com/projects/lightbox/
The basic way in which this works is to look for A elements with a rel
attribute containing a "lightbox" value. For everyone it finds, it
attaches a click event handler, which then handles all the funky
animation and loading of the image within the same page.
Using the above css-like syntax, that could be achieved by doing this:
a[rel=lightbox] {
click: showLightbox(attr(href), attr(title));
}
I know it's not an extremely well thought out idea, it's just a bit of
brainstorming, but it could always be improved. It also seems to be a
little out of scope for the WhatWG.
--
Lachlan Hunt
http://lachy.id.au/
More information about the whatwg
mailing list