【发布时间】:2016-09-30 08:18:23
【问题描述】:
我想在浏览器中遍历 DOM 树,收集“叶子”的 DOM 节点,不包含 DOM 子节点,仅包含文本节点。
我在想有一种方法可以用 reduce 来做到这一点,但对我来说如何......在树状结构上递归地减少并不明显。
我已经构建了一堆可用的组件...
let nodeFromJQuery = R.invoker(1,'get')(0);
let nodeFromAny = R.ifElse(R.isArrayLike,nodeFromJQuery,R.identity);
let nodeType = R.pipe(nodeFromAny,R.prop('nodeType'));
let children = R.pipe(nodeFromAny,R.prop('childNodes'));
let textNodeType = R.equals(3);
let domNodeType = R.equals(1);
let domNodes = R.map(isDomNode);
let textNodes = R.map(isTextNode);
let isTextNode = R.pipe(nodeType, textNodeType);
let isDomNode = R.pipe(nodeType,domNodeType);
let domChildren = R.pipe(children,R.filter(isDomNode));
isLeaf = R.pipe(domChildren, R.isEmpty);
getNodes = R.filter(R.not(isLeaf));
getLeaves = R.filter(isLeaf)
但我没有看到简单的减少...有什么想法吗?
谢谢,
【问题讨论】:
标签: javascript functional-programming ramda.js