- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Wed, 9 Apr 2014 09:25:04 -0700
- To: Joshua Peek <josh@joshpeek.com>
- Cc: www-style list <www-style@w3.org>
On Tue, Apr 8, 2014 at 9:28 PM, Joshua Peek <josh@joshpeek.com> wrote:
> On Tue, Apr 8, 2014 at 7:51 PM, Tab Atkins Jr. <jackalmage@gmail.com> wrote:
>> I've been thinking we should add a Selector interface anyway. What
>> about an API like:
>>
>> var sel = new Selector(".foo", document)
>> sel.watch(function(record){...})
>>
>> Or something similar. Dunno whether I'd want to use events or
>> callbacks, and whether it should fire once per element (passing that
>> element to the callback) or once per set change (passing the matched
>> set to the callback).
>
> That sounds wonderful too.
>
> Maybe it would expose the reverse of the Element match and query? e.g.
> sel.matches(element) and sel.queryAll(container).
Yes, that was the original intention. I expect to add all the
selector-using methods to Selector, with identical behavior, and
slightly different semantics, such that using the Selector version
over the Element version is similar to using a compiled regex vs an
uncompiled one - the Selector version takes a little more time to set
up because the UA is optimizing it, but runs faster afterwards.
> Heres another API idea.
>
> var sel = new Selector(".foo", document)
> sel.watch(function(el) {
> // matched a .foo, lets add an event handler to it
> el.addEventListener('click', onClick);
> return function() {
> // .foo was removed from our element instance, cleanup
> // its event handler to disable the behavior.
> el.removeEventListener('click', onClick);
> };
> });
Hm. Here, the callback gets called on each element as it matches, and
then you're expected to return a callback for calling when it stops
matching? Interesting.
> Also related to the Selector interface idea, I've worked on a
> "selector set" concept that was implemented mainly for performance. It
> models the CSS rule matching API kinda nicely. Though, it doesn't
> cover this "watching" concept.
>
> var styles = new SelectorSet();
> styles.add('p', {
> fontSize: '12px',
> color: 'red'
> });
> styles.add('p.item', {
> background: 'white'
> });
>
> // apply matching styles to element
> styles.matches(el).forEach(function(rule) {
> for (name in rule.data)
> el.style[name] = rule.data[name];
> });
>
> https://github.com/josh/selector-set
Hm, I've read over the github README, and I'm not sure I see what
use-cases this is addressing. Could you help me understand what it's
useful for?
~TJ
Received on Wednesday, 9 April 2014 16:25:53 UTC