- From: Joshua Peek <josh@joshpeek.com>
- Date: Tue, 8 Apr 2014 23:28:22 -0500
- To: "Tab Atkins Jr." <jackalmage@gmail.com>
- Cc: www-style list <www-style@w3.org>
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). 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); }; }); 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 I'm happy to help implement any prollyfill's in this area. Thanks!
Received on Wednesday, 9 April 2014 04:28:49 UTC