Re:From jQuery to JavaScript and back again
by jackmoore on Friday February 08, 2013 @09:59AM
(#5188133)
Iterating a NodeList isn't so bad:
Array.prototype.forEach.call(
document.querySelectorAll('a'), function(el){
console.log(el);
});
But, I agree with the point. If the NodeList isn't live, like it is for the other DOM querying methods, then what is the point in returning a NodeList instead of an array?
Re:From jQuery to JavaScript and back again
by masklinn on Friday February 08, 2013 @10:22AM
(#5188240)
The DOM WebIDL does not know what an array is. Though an IDL extension/annotation added some time ago allows inheriting IDL interfaces from core language objects or interfaces rather than the root object (http://dev.w3.org/2006/webapi/WebIDL/#ArrayClass), and DOM4 adds this annotation to NodeList http://dom.spec.whatwg.org/#interface-nodelist
They provide a limited part of the selection function. Altering nodes, creating new nodes (and adding them to the DOM tree) and programmatic DOM tree traversals? Not so much, you get very clumsy and verbose APIs for that in the regular DOM. Same with DOM event handling, jQuery provides nice shortcuts for binding and delegation, the DOM... not so much (even if you limit yourself to IE9 and don't have to handle the garbage that is the oldIE event model)
Also, as usual with the fucking DOM, querySelectorAll returns a NodeList which means you can't trivially use higher-order iterators on it (you've got to use the "generics" version and hope it works correctly everywhere).
Fuck, that makes me angry again, the DOM is such a clusterfuck of an API.