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"
}
};
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();
}
});
Returns all matching nodes from the object.
select(people, ".age").nodes(); // [35, 15]
Removes matching elements from the original object.
select(people, ".age").remove();
Updates all matching nodes using the given callback.
select(people, ".age").update(function(age) {
return age - 5;
});
Reduces the original object down to only the matching elements (the hierarchy is maintained).
select(people, ".age").condense();
{
george: { age: 35 },
mary: { age: 15 }
}
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.
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.
Huge thanks to @substack for the ingenious js-traverse and @lloyd for the ingenious JSONSelect spec and selector parser.