保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
var isTag = require("domelementtype").isTag;
 
module.exports = {
    filter: filter,
    find: find,
    findOneChild: findOneChild,
    findOne: findOne,
    existsOne: existsOne,
    findAll: findAll
};
 
function filter(test, element, recurse, limit){
    if(!Array.isArray(element)) element = [element];
 
    if(typeof limit !== "number" || !isFinite(limit)){
        limit = Infinity;
    }
    return find(test, element, recurse !== false, limit);
}
 
function find(test, elems, recurse, limit){
    var result = [], childs;
 
    for(var i = 0, j = elems.length; i < j; i++){
        if(test(elems[i])){
            result.push(elems[i]);
            if(--limit <= 0) break;
        }
 
        childs = elems[i].children;
        if(recurse && childs && childs.length > 0){
            childs = find(test, childs, recurse, limit);
            result = result.concat(childs);
            limit -= childs.length;
            if(limit <= 0) break;
        }
    }
 
    return result;
}
 
function findOneChild(test, elems){
    for(var i = 0, l = elems.length; i < l; i++){
        if(test(elems[i])) return elems[i];
    }
 
    return null;
}
 
function findOne(test, elems){
    var elem = null;
 
    for(var i = 0, l = elems.length; i < l && !elem; i++){
        if(!isTag(elems[i])){
            continue;
        } else if(test(elems[i])){
            elem = elems[i];
        } else if(elems[i].children.length > 0){
            elem = findOne(test, elems[i].children);
        }
    }
 
    return elem;
}
 
function existsOne(test, elems){
    for(var i = 0, l = elems.length; i < l; i++){
        if(
            isTag(elems[i]) && (
                test(elems[i]) || (
                    elems[i].children.length > 0 &&
                    existsOne(test, elems[i].children)
                )
            )
        ){
            return true;
        }
    }
 
    return false;
}
 
function findAll(test, rootElems){
    var result = [];
    var stack = rootElems.slice();
    while(stack.length){
        var elem = stack.shift();
        if(!isTag(elem)) continue;
        if (elem.children && elem.children.length > 0) {
            stack.unshift.apply(stack, elem.children);
        }
        if(test(elem)) result.push(elem);
    }
    return result;
}