• Stars
    star
    118
  • Rank 299,923 (Top 6 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 10 years ago
  • Updated about 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A polyfill for the Elements class in recently added to the DOM Standard, as well as .query and .queryAll methods for Elements, Element, Document, and DocumentFragment.

DOM Elements

โš ๏ธ Relying on Element#query and Element#queryAll is somewhat risky since theyโ€™ve been temporarily removed from the current DOM Standard due to significant implementation issues. See related discussions on Stack Overflow and the WHATWG's DOM spec repository on GitHub, and use at your own risk.

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.

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+.

Background

The DOM Standard added .query(relativeSelector) and .queryAll(relativeSelector) 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.

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

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);
});

The .query and .queryAll methods are also available on the Elements array returned by .queryAll.

 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 by @bloodyowl.

License

MIT

More Repositories

1

css-terminal

CSS Terminal is a bookmarklet for rapid CSS development, prototyping and debugging.
HTML
91
star
2

passport-google-oauth2-example

An Express 4 application using Google for authentication via OAuth2.
JavaScript
30
star
3

geojson-polyline

Convert GeoJSON coordinates to and from encoded polylines. Supports all major GeoJSON types.
JavaScript
15
star
4

href-replace

For each `a` element in a string of HTML, replace the `href` attribute with a new value provided by the `replacer` function.
JavaScript
4
star
5

vollkorn

Vollkorn: the free and healthy typeface for bread and butter use. Designed by Friedrich Althausen and ready to drop in your site.
CSS
3
star
6

illuminate

Extract Markdown from JavaScript source code to build READMEs and API documentation.
JavaScript
3
star
7

open-sans

Open Sans: the friendly, open humanist sans serif typeface designed by Steve Matteson, ready to drop in your website.
CSS
3
star
8

proto

Rapid prototyping with Pug, Sass, and CommonJS/Browserify, and LiveReload
JavaScript
2
star
9

big

Be. Insanely. Great. A curated, well-organized collection of the best web development resources.
HTML
2
star
10

chat-anarchy

A multi-user, multi-room chat using socket.io.
JavaScript
2
star
11

wikitable-to-json

Generate a JSON representation of a Wikipedia table
JavaScript
2
star
12

responsive-site

HTML
2
star
13

intro-to-javascript

An introduction to programming using JavaScript
HTML
1
star
14

new-presentation

Boilerplate for Markdown-based presentations using Remark.
HTML
1
star
15

perpetual-scroller

Example implementation of a lazily loaded, perpetually scrolling image gallery.
JavaScript
1
star
16

node-js-workshop

This repository is for the project files for the Frontend Masters Node.js workshop: http://frontendmasters.com/workshops/node-workshop/
JavaScript
1
star
17

practical-type

Learn and practice touch typing with timed exercises using the most common words in the English language.
JavaScript
1
star
18

deploy-chat

Bare-bones chat example on deno-deploy.
JavaScript
1
star
19

canvas

Experiment using the canvas element, based on the Touch events example on MDN.
JavaScript
1
star