Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
const cssTree = require("css-tree@1.0.0-alpha.29");
function getSelectorParent(selector) {
const selectorAst = cssTree.parse(selector, { context: 'selector' });
// solution #1
// selectorAst.children.prevUntil(selectorAst.children.tail, (node, item, list) => {
// list.remove(item);
// return node.type === 'Combinator' || node.type === 'WhiteSpace';
// });
// solution #2
let item;
while (item = selectorAst.children.pop()) {
const node = item.data;
if (node.type === 'Combinator' || node.type === 'WhiteSpace') {
break;
}
}
return cssTree.generate(selectorAst);
}
[
'.foo .bar',
'.foo',
'div>p'
].forEach(selector => {
console.log(`[${selector}] -parent-> [${getSelectorParent(selector)}]`);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment