unist utility with equivalents for querySelector
,
querySelectorAll
, and matches
.
Note that the DOM has references to their parent nodes, meaning that
document.body.matches(':last-child')
can be evaluated.
This information is not stored in unist, so selectors like that don’t work.
View the list of supported selectors »
npm:
npm install unist-util-select
Check that the given node matches selector
.
Returns boolean
, whether the node matches or not.
This only checks the element itself, not the surrounding tree.
Thus, nesting in selectors is not supported (paragraph strong
,
paragraph > strong
), nor are selectors like :first-child
, etc.
This only checks that the given element matches the selector.
var u = require('unist-builder')
var matches = require('unist-util-select').matches
matches('strong, em', u('strong', [u('text', 'important')])) // => true
matches('[lang]', u('code', {lang: 'js'}, 'console.log(1)')) // => true
Select the first node matching selector
in the given tree
(could be the
tree itself).
Returns the found node, if any.
var u = require('unist-builder')
var select = require('unist-util-select').select
console.log(
select(
'code ~ :nth-child(even)',
u('blockquote', [
u('paragraph', [u('text', 'Alpha')]),
u('paragraph', [u('text', 'Bravo')]),
u('code', 'Charlie'),
u('paragraph', [u('text', 'Delta')]),
u('paragraph', [u('text', 'Echo')])
])
)
)
Yields:
{type: 'paragraph', children: [{type: 'text', value: 'Delta'}]}
Select all nodes matching selector
in the given tree
(could include the
tree itself).
Returns all found nodes, if any.
var u = require('unist-builder')
var selectAll = require('unist-util-select').selectAll
console.log(
selectAll(
'code ~ :nth-child(even)',
u('blockquote', [
u('paragraph', [u('text', 'Alpha')]),
u('paragraph', [u('text', 'Bravo')]),
u('code', 'Charlie'),
u('paragraph', [u('text', 'Delta')]),
u('paragraph', [u('text', 'Echo')]),
u('paragraph', [u('text', 'Foxtrot')]),
u('paragraph', [u('text', 'Golf')])
])
)
)
Yields:
[
{type: 'paragraph', children: [{type: 'text', value: 'Delta'}]},
{type: 'paragraph', children: [{type: 'text', value: 'Foxtrot'}]}
]
-
*
(universal selector) -
,
(multiple selector) -
paragraph
(type selector) -
blockquote paragraph
(combinator: descendant selector) -
blockquote > paragraph
(combinator: child selector) -
code + paragraph
(combinator: adjacent sibling selector) -
code ~ paragraph
(combinator: general sibling selector) -
[attr]
(attribute existence, checks that the value on the tree is not nullish) -
[attr=value]
(attribute equality, this stringifies values on the tree) -
[attr^=value]
(attribute begins with, only works on strings) -
[attr$=value]
(attribute ends with, only works on strings) -
[attr*=value]
(attribute contains, only works on strings) -
[attr~=value]
(attribute contains, checks ifvalue
is in the array, if there’s an array on the tree, otherwise same as attribute equality) -
:any()
(functional pseudo-class, use:matches
instead) -
:has()
(functional pseudo-class) Relative selectors (:has(> img)
) are not supported, but:scope
is -
:matches()
(functional pseudo-class) -
:not()
(functional pseudo-class) -
:blank
(pseudo-class, blank and empty are the same: a parent without children, or a node without value) -
:empty
(pseudo-class, blank and empty are the same: a parent without children, or a node without value) -
:root
(pseudo-class, matches the given node) -
:scope
(pseudo-class, matches the given node) - *
:first-child
(pseudo-class) - *
:first-of-type
(pseudo-class) - *
:last-child
(pseudo-class) - *
:last-of-type
(pseudo-class) - *
:only-child
(pseudo-class) - *
:only-of-type
(pseudo-class) - *
:nth-child()
(functional pseudo-class) - *
:nth-last-child()
(functional pseudo-class) - *
:nth-last-of-type()
(functional pseudo-class) - *
:nth-of-type()
(functional pseudo-class)
- * — Not supported in
matches
unist-util-filter
— Create a new tree with all nodes that pass a testunist-util-map
— Create a new tree with all nodes mapped by a given functionunist-util-flatmap
— Create a new tree by mapping (to an array) with the given functionunist-util-is
— Check if a node passes a testunist-util-remove
— Remove nodes from treesunist-util-remove-position
— Remove positional info from treesunist-util-visit
— Recursively walk over nodesunist-util-visit-parents
— Likevisit
, but with a stack of parentsunist-builder
— Helper for creating trees
See contributing.md
in syntax-tree/.github
for ways to get
started.
See support.md
for ways to get help.
This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.
MIT © Eugene Sharygin