Learn about our RFC process, Open RFC meetings & more.Join in the discussion! »


20.2.0 • Public • Published

Selector lite – Build Coverage Size Buy Me A Tea

A small pure-JavaScript CSS selector engine.

  • no library dependencies
  • CSS 3 Selector support
  • only 2KB minified and 1KB gzipped


var selector = require("selector-lite")
// Can be used to implement browser built-in functions.
function getElementById(id) {
    return selector.find(this, "#" + id, true)
function getElementsByTagName(tag) {
    return selector.find(this, tag)
function getElementsByClassName(sel) {
    return selector.find(this, "." + sel.replace(/\s+/g, "."))
function querySelector(sel) {
    return selector.find(this, sel, true)
function querySelectorAll(sel) {
    return selector.find(this, sel)


  • selector.find(node, selector, returnFirstMatch) - Find matching elements like querySelector.
  • selector.matches(node, selector) - Returns a Boolean indicating whether or not the element would be selected by the specified selector string.
  • selector.closest(selector) - Returns the Element, descendant of this element (or this element itself), that is the closest ancestor of the elements selected by the selectors given in parameter.
  • selector.next(selector) - Retrieves the next sibling that matches selector.
  • selector.prev(selector) - Retrieves the preceding sibling that matches selector.

Custom selectors

Custom selector can be added to selector.selectorMap, where method shortcuts are available (m->matches, c->closest, n->next, p->prev).

  • _ - node.
  • v - part between () in :nth-child(2n+1).
  • a and b can be used as temp variables.
// Add `:input` selector
selector.selectorMap.input = "_.tagName=='INPUT'"
// Add `:val()` selector
selector.selectorMap.val = "_.value==v"

Coding Style Guidelines

  • Use tabs for indentation, align with spaces
  • Use lowerCamelCase for method and variable names
  • Use UpperCamelCase for constructor names
  • Commit files with Unix-style line endings
  • Do not use spaces in file and directory names Consider substituting a dash (-) where you would normally use spaces.
  • Rebase before pushing
  • Fix tests before push or pull request

External links

GitHub repo | npm package | DOM spec | Selectors Level 3 | Travis CI | Coveralls coverage | Buy Me A Tea


Copyright (c) 2015-2019 Lauri Rooden <lauri@rooden.ee>
The MIT License


npm i selector-lite

DownloadsWeekly Downloads






Unpacked Size

7.7 kB

Total Files


Last publish


  • avatar