[UNMAINTAINED] Traverse and modify objects using JSONSelect selectors
JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
test
LICENSE
README.md
index.js return tranformed object from update(), remove(), forEach(), and cond… Jul 15, 2013
package.json
select-min.js
select.js

README.md

js-select

js-select uses js-traverse to traverse and modify JavaScript object nodes that match JSONSelect selectors.

var people = {
   george: {
      age : 35,
      movie: "Repo Man"
   },
   mary: {
      age: 15,
      movie: "Twilight"
   }
};

.forEach(fn)

Iterates over all matching nodes in the object. The callback gets a special this context. See js-traverse for all the things you can do to modify and inspect the node with this context. In addition, js-select adds a this.matches() which will test if the node matches a selector:

select(people).forEach(function(node) {
   if (this.matches(".mary > .movie")) {
      this.remove();
   }
});

.nodes()

Returns all matching nodes from the object.

select(people, ".age").nodes(); // [35, 15]

.remove()

Removes matching elements from the original object.

select(people, ".age").remove();

.update(fn)

Updates all matching nodes using the given callback.

select(people, ".age").update(function(age) {
   return age - 5;
});

.condense()

Reduces the original object down to only the matching elements (the hierarchy is maintained).

select(people, ".age").condense();
{
    george: { age: 35 },
    mary: { age: 15 }
}

Selectors

js-select supports the following JSONSelect selectors:

*
type
.key
ancestor selector
parent > selector
sibling ~ selector
selector1, selector2
:root
:nth-child(n)
:nth-child(even)
:nth-child(odd)
:nth-last-child(n)
:first-child
:last-child
:only-child
:has(selector)
:val("string")
:contains("substring")

See details on each selector, and try them out on the JSONSelect website.

Install

For node, install with npm:

npm install js-select

For the browser, download the select.js file or fetch the latest version from npm and build a browser file using browserify:

npm install browserify -g
npm install js-select

browserify --require js-select --outfile select.js

this will build a browser file with require('js-select') available.

Propers

Huge thanks to @substack for the ingenious js-traverse and @lloyd for the ingenious JSONSelect spec and selector parser.