/arlement

Extendable DOM selector engine

Primary LanguageJavaScriptThe UnlicenseUnlicense

Arlement

Extendable DOM selector engine

Arlement takes a CSS Selector string and gives you an array of HTML elements. That's it.

Install

To install Arlement you will need Node.js:

npm install arlement --save

Usage

import Arlement from 'arlement'

const $ = new Arlement()

// adds a class to all li-elements
$('li').forEach(element => element.classList.add('list-item'))

You can also pass in a HTMLElement, a NodeList or a present Arlement:

const list = document.querySelector('ul#list')

// adds a class to the selected element
$(list).forEach(element => element.classList.add('list'))

// note: Arlement is always an array (even it contains just one element). The following doesn't work!
$(list).classList.add('list') // error!
const listItems = document.querySelectorAll('li')

// adds a class to all li-elements
$(listItems).forEach(element => element.classList.add('list-item'))
const $heading = $('.heading')
const $listItems = $('li')
const $headingAndListItems = $heading.concat($listItems)

// adds a class to all h1- and li-elements
$(headingAndListItems).forEach(element => element.classList.add('heading-or-list-item'))

Arlement is a real Array, so you can use all buildin Array methods to work with or manipulate the elements machted by the selector.

// all hidden li-elements
const $hiddenListItems = $('li').filter(element => element.hasAttribute('hidden'))

context

Of course you can definde a context where to search for elements:

<!-- index.html --><h1 class="heading">Outer Heading</h1>
<div class="inner">
  <h2 class="heading">Inner Headeing</h2>
</div>
const $inner = $('.inner')

// selects the h2 only
const innerHeading = $('.heading', $inner)

In your project

To not call const $ = new Arlement() in every file, you can instantiate Arlement once and import it in every file you need it:

// globals.js

import Arlement from 'arlement'
export default new Arlement()
// list.js

import $ from './globals.js'

$('li').forEach(element => element.classList.add('list-item'))

Extensions

If you're seeing youreself often to add classes to elements, you can add a helper function to Arlement

// globals.js

import Arlement from 'arlement'
export default new Arlement({
  addClass: className => {
    this.forEach(element => element.classList.add(className))
    return this // returning `this` makes your Arlement chainable!
  }
})
// list.js

import $ from './globals.js'

$('li').addClass('list-item')
// heading.js

import $ from './globals.js'

$('h1').addClass('heading')

Tests

Tests are written with QUnit. You can see the test results on Travis CI or in your target browser on https://lokkasio.github.io/arlement/.

Contribution

Any kind of feedback or contribution (bug reports, feature requests, ideas, questions, pr's, …) is wellcome!