1 var isTag = require("domelementtype").isTag;
6 findOneChild: findOneChild,
12 function filter(test, element, recurse, limit){
13 if(!Array.isArray(element)) element = [element];
15 if(typeof limit !== "number" || !isFinite(limit)){
18 return find(test, element, recurse !== false, limit);
21 function find(test, elems, recurse, limit){
22 var result = [], childs;
24 for(var i = 0, j = elems.length; i < j; i++){
26 result.push(elems[i]);
27 if(--limit <= 0) break;
30 childs = elems[i].children;
31 if(recurse && childs && childs.length > 0){
32 childs = find(test, childs, recurse, limit);
33 result = result.concat(childs);
34 limit -= childs.length;
42 function findOneChild(test, elems){
43 for(var i = 0, l = elems.length; i < l; i++){
44 if(test(elems[i])) return elems[i];
50 function findOne(test, elems){
53 for(var i = 0, l = elems.length; i < l && !elem; i++){
56 } else if(test(elems[i])){
58 } else if(elems[i].children.length > 0){
59 elem = findOne(test, elems[i].children);
66 function existsOne(test, elems){
67 for(var i = 0, l = elems.length; i < l; i++){
71 elems[i].children.length > 0 &&
72 existsOne(test, elems[i].children)
83 function findAll(test, rootElems){
85 var stack = rootElems.slice();
87 var elem = stack.shift();
88 if(!isTag(elem)) continue;
89 if (elem.children && elem.children.length > 0) {
90 stack.unshift.apply(stack, elem.children);
92 if(test(elem)) result.push(elem);