树形数据的搜索-CSDN博客

44 阅读1分钟
//递归树,
function findNode(id, data) {
        for (let i = 0; i < data.length; i++) {
            if (data[i].nodeId == id) {
                return data[i]
            } else if (data[i].children !== null && data[i].children !== undefined && data[i].children.length !== 0) {
                let val = findNode(id, data[i].children)
                if (val != undefined) {
                    return val;
                }
            }
        }
    }
 function filterByName(menu, name) {
        var menuNew = [];
        for (var i = 0; i < menu.length; i++) {
            var nodeNew = undefined;
            var node = menu[i];
            var childrenNode = node.children;

            var childrenMenu = [];
            if (childrenNode) {
                if (childrenNode.length > 0) {
                    childrenMenu = filterByName(childrenNode, name);
                }
            }

            if (childrenMenu) {
                if (childrenMenu.length > 0) {
                    nodeNew = new Object();
                    nodeNew = nodeFillNewFromOld(node, nodeNew);
                    nodeNew.children = childrenMenu;
                } else {
                    if (checkNodeEquals(node, name)) {
                        nodeNew = new Object();
                        nodeNew = nodeFillNewFromOld(node, nodeNew);
                    }
                }
            }
            if (nodeNew) {
                menuNew.push(nodeNew);
            }
        }
        console.log(menuNew);
        return menuNew;
    }
    function checkNodeEquals(node, name) {
        if (node.nodeName.indexOf(name) != -1) {
            return true;
        } else {
            return false;
        }}
    function nodeFillNewFromOld(oldNode, newNode) {
        newNode.nodeId = oldNode.nodeId;
        // newNode.code = oldNode.code;
        newNode.nodeName = oldNode.nodeName;
        newNode.nodeInfo = oldNode.nodeInfo;
        newNode.notLeaf = oldNode.notLeaf;
        newNode.pnodeId = oldNode.pnodeId;
        // newNode.checked = oldNode.checked;
        // newNode.attributes = oldNode.attributes;
        newNode.children = undefined;

        return newNode;
    }

高亮文本

text= highLightKeywords(text,keywords)即可

  //高亮关键字 text =>内容  words:关键词   tag 被包裹的标签
    //匹配每一个关键字字符
    function highLightKeywords(text, words) {
        var i, len = words.length, re;
        for (i = 0; i < len; i++) {
// 正则匹配所有的文本
            re = new RegExp(words[i], 'g');
            if (re.test(text)) {
                text = text.replace(re, `<span class="highlight">$&</span>`);
            }
        }
        return text;
    }

别人的方法

https://www.cnblogs.com/JerryD/p/11535589.html