UNPKG

dom-elements

Version:

Polyfill for Elements class and query/queryAll additions to the DOM standard.

97 lines (71 loc) 3.58 kB
DOM Elements ============= DOM Elements is a polyfill that allows you to use the `.query` and `.queryAll` methods newly added to [the DOM Standard]. `queryAll` returns an instance of the new [Elements class] which extends Array, allowing you to use map, reduce, filter, forEach, and the like on the returned elements. [Elements class]: http://dom.spec.whatwg.org/#collections:-elements [the DOM Standard]: http://dom.spec.whatwg.org [![The DOM Elements polyfill supports Internet Explorer 9+, Chrome 15.0+, Firefox 4.0+, Opera 12.0+, Safari 5.0.5+, Mobile Safari 6.0+.](https://ci.testling.com/barberboy/dom-elements.png)](https://ci.testling.com/barberboy/dom-elements) Background ---------- The DOM Standard added [query] and [queryAll] methods to the ParentNode interface, which is implemented by Document, Element, and DocumentFragment. It also defined a new class, [Elements], which extends Array and also has query and queryAll. [Elements]: http://dom.spec.whatwg.org/#collections:-elements [query]: http://dom.spec.whatwg.org/#dom-parentnode-query [queryAll]: http://dom.spec.whatwg.org/#dom-parentnode-queryall Usage ----- You can install the `dom-elements` package with either npm or bower, or directly download [dom-elements.js] or [dom-elements.min.js] and include them in your project. bower install dom-elements or npm install dom-elements [dom-elements.js]: https://raw.githubusercontent.com/barberboy/dom-elements/0.1.0/lib/dom-elements.js [dom-elements.min.js]: https://raw.githubusercontent.com/barberboy/dom-elements/0.1.0/lib/dom-elements.min.js You are also welcome to clone the repo directly and use the dom-elements.js or dom-elements.min.js in the `lib` directory. git clone https://github.com/barberboy/dom-elements npm install npm start ### .query(relativeSelector) `.query()` is available on document, documentFragments, individual DOM elements, and the Elements class. It will return the first descendant element which matches the selector, or null if there are zero matches. var siteHeader = document.query('header'); if (siteHeader) { var active = siteHeader.query('.site-menu .active'); } ### .queryAll(relativeSelector) .queryAll is available on document, documentFragments, individual DOM elements and the Elements class. It will return a new instance of Elements containing descendants that match the passed selector, or an instance with no elements if there are no matches. var collapsibles = document.queryAll('.collapsible'); collapsibles.forEach(function(collapsible){ var heading = collapsible.query('h1,h2,h3,h4,h5,h6'); heading.addEventListener('click', function(event) { collapsible.classList.toggle('collapsed'); }, false); }); // .query and .queryAll are available on the Elements array as well. var sections = document.queryAll('section'); var headingLinks = sections.queryAll(':any(h1,h2,h3,h4,h5,h6) a'); Caveats ------- * Since we use querySelectorAll and ES5 Array methods, this shim will not work in IE8 and below. See the browser support list at <https://ci.testling.com/barberboy/dom-elements>. * This shim (despite it's name—ha!) does not expose the Elements constructor function since there isn't a compelling use-case for instantiating it directly. * **Update:** Support for [Relative Selectors] was added in version [0.1.0][issue #2] by @bloodyowl. [Relative Selectors]: http://dev.w3.org/csswg/selectors/#relative [issue #2]: https://github.com/barberboy/dom-elements/issues/2 License ------- MIT