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"
}
}
select(people, ".age").nodes();
select(people, ".age").update(function(age) {
return age - 5;
});
select(people, ".age").remove();
There's also a forEach()
which gets a special this
context. See js-traverse for all the things you can do to modify and inspect the node with the 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();
}
}
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.