Because you want the $ of jQuery without the jQuery.
You could call this a microlibrary, but really it's just some code that works.
You may be interested in this library if you get tired of the [].slice.call( document.querySelectorAll('.foo'), function(){ …
rodeo.
What bling'll do for ya:
// forEach over the qSA result, directly.
document.querySelectorAll('input').forEach(function (el) {
// …
})
// on() rather than addEventListener()
document.body.on('dblclick', function (e) {
// …
})
// classic $ + on()
$('p').on('click', function (e) {
// …
})
// delegate events
$('p').on('click', '.delegate', function (e) {
// …
})
on()
works on elements,document
,window
, and results fromquerySelector
&querySelectorAll
.$
is qSA so if you're grabbing a single element you'll have to[0]
it.- Bling plays well with authoring ES6
- Resig explored this stuff a while ago: github.com/jeresig/nodelist
- Bling doesn't work on Android 2.3 or iOS 5.0. Works everywhere else including IE8 (assuming Function.bind)
- The NodeList prototype usually inherits from Object, so we move it to Array.
- I'm curious how ES6/7 would let a NodeList be iterable and inherit from EventTarget
- Setting
Node.prototype.on = EventTarget.prototype.addEventListener
is awesome. It works in Chrome/FF but not yet in IE/Safari. - I haven't set up any off() or trigger() to map to
dispatchEvent
&removeEventListener
. I'm OK with that.