Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ryanve/scan

querySelectorAll selector engine
https://github.com/ryanve/scan

javascript module selector-engine

Last synced: about 1 month ago
JSON representation

querySelectorAll selector engine

Awesome Lists containing this project

README

        

# scan
#### standalone querySelectorAll selector engine with [jQuery](http://jquery.com)-like interface

```sh
$ npm install scan --save
```

### Basic usage

```js
var scan = require('scan')
scan('.example').find('a').not('[href^="#"]')
```

## API ([0.9](../../releases))


  • scan() instances are array-like and inherit from scan.prototype and Array.prototype

  • scan() methods chain intuitively or are callable via scan.prototype[method].call(array)

  • Methods are generally compatible with jQuery methods of the same name

### scan(query, context?)
- `scan(selector)` → elements that match selector
- `scan(selector, node|nodes)` → elements that match selector from node or any nodes
- `scan(node|nodes)` → nodes wrapped in `scan` instance


### .find(needle)
- `scan(query).find(selector)` → descendants that match selector
- `scan(query).find(element|elements)` → elements that descend from query
- `scan(stack).find(fn, scope?)` → the first value to pass `fn.call(scope, value, i, stack)`


### .filter(needle)
- `scan(query).filter(nodes, selector)` → stack filtered by selector
- `scan(query).filter(fn)` → stack filtered by `fn.call(element, i)`
- `scan(query).filter(element|elements)` → stack filtered by one or more elements
- `scan(array).filter(values)` → the intersection of 2 arrays


### .not(needle)
- `scan(query).filter(selector)` → `nodes` filtered *against* `selector`
- `scan(query).not(fn)` → stack filtered *against* `fn.call(element, i)`
- `scan(query).not(element|elements)`→ stack filtered *against* one or more elements
- `scan(array).not(values)` → the difference of 2 arrays


### #find(needle)
- `scan.find(selector, context?)` → array of elements that match selector
- `scan.find(stack, fn, scope?)` → the first value to pass `fn.call(scope, value, i, stack)`


### #matches(element, selector)
- `scan.matches(element, selector)` → `true` if element matches selector


### #contains(haystack, needle)
- `scan.contains(node, element)` → `true` if node contains element
- `scan.contains(stack, item, start=0)` → `true` if stack contains item
- `scan.contains(str, substr, start=0)` → `true` if str contains substr

## Support

Selector queries use [`querySelectorAll` where available](http://caniuse.com/#feat=queryselector) or else degrade to [`getElementsByTagName`](https://developer.mozilla.org/en-US/docs/Web/API/element.getElementsByTagName).

- Lone tag selectors like `'p'` work in IE5.5+ and all other browsers
- The universal selector `'*'` works in IE6+ and all other browsers
- [CSS2+ selectors](http://www.w3.org/TR/CSS2/selector.html#pattern-matching) work in IE8+, FF3.5+, Opera 10+, and [all other browsers](http://caniuse.com/css-sel2)
- [CSS3+ selectors](http://www.w3.org/TR/css3-selectors/#selectors) work in IE9+, FF3.5+, Opera 10+, and [all other browsers](http://caniuse.com/css-sel3)

## Developers

Contribute by making edits in [`/src`](./src) or reporting [issues](../../issues).

```sh
$ npm install
$ grunt test
```

## Fund
[Tip the developer](https://www.gittip.com/ryanve/) =)

## License
MIT