diff --git a/README.md b/README.md index e8ca985..52ae3e5 100644 --- a/README.md +++ b/README.md @@ -185,6 +185,10 @@ The following subroutines are available out of the box. `previous` subroutine selects the preceding sibling. +|Parameter name|Description|Default| +|---|---|---| +|CSS selector|CSS selector used to select an element.|N/A| + Example: ```html diff --git a/src/evaluators/cheerioEvaluator.js b/src/evaluators/cheerioEvaluator.js index b19459d..f6fe8b4 100644 --- a/src/evaluators/cheerioEvaluator.js +++ b/src/evaluators/cheerioEvaluator.js @@ -69,8 +69,8 @@ export default (): EvaluatorType => { .root(); }; - const previous = (node) => { - return node.prev(); + const previous = (node, selector) => { + return node.prev(selector); }; const querySelectorAll = (node, selector) => { diff --git a/test/surgeon/evaluators/cheerioEvaluator/previous.js b/test/surgeon/evaluators/cheerioEvaluator/previous.js index 280485f..c43e926 100644 --- a/test/surgeon/evaluators/cheerioEvaluator/previous.js +++ b/test/surgeon/evaluators/cheerioEvaluator/previous.js @@ -26,3 +26,29 @@ test('returns the previous node', (t) => { t.true(previousNode.text() === '1'); }); + +test('returns previous node matching the selector', (t) => { + const { + previous, + parseDocument, + querySelectorAll + } = cheerioEvaluator(); + + const body = ` + + `; + + const document = parseDocument(body); + const nodes = querySelectorAll(document, 'li'); + + t.true(nodes.length === 4); + + const previousNode = previous(nodes[2], '.foo'); + + t.true(previousNode.text() === '1'); +});