/* * treeId:节点树ID * keyword:模糊查询输入框的id,如:“#keyword” * notSearchType:不参与查询的节点类型 * typeSonNode:不参与查询的节点的子孙节点是否也不参与匹配,默认为false,即子节点参与匹配 * */ window.newFuzzySearch = function( treeId, keyword, notSearchType = [], typeSonNode = false, dispatch = "" ) { //获取所有节点数据 let zTreeObj = $.fn.zTree.getZTreeObj(treeId); let idKey = zTreeObj.setting.data.simpleData.idKey; let nodes = zTreeObj.getNodes(); //过滤掉不要的 function getCustomNodes(allNodes) { // let allNode = JSON.parse(JSON.stringify(allNodes)) let notSearchTypeNodesIds = []; if (notSearchType.length) { allNodes.forEach((allNodeItem) => { if (notSearchType.includes(allNodeItem.sourceType)) { notSearchTypeNodesIds.push(allNodeItem[idKey]); } }); //typeSonNode为true时,循环notSearchType类型的节点,找出其子节点 let res = []; if (typeSonNode) { notSearchTypeNodesIds.forEach((id, index) => { let nodes = zTreeObj.transformToArray( zTreeObj.getNodeByParam(idKey, id, null) ); nodes.forEach((item) => { res.push(item[idKey]); }); }); notSearchTypeNodesIds = res; } } let res = []; allNodes.forEach((item, index) => { if (!notSearchTypeNodesIds.includes(item[idKey])) { // console.log(index) res.push(item); } }); allNodes = res; return allNodes; } /*let allNodes = zTreeObj.transformToArray(nodes); let nodeChildren = getCustomNodes(allNodes)*/ // console.log("nodeChildren", nodeChildren) // console.log("allNodes", allNodes) //隐藏所有节点 function hideAllNode(allNodes) { if (!allNodes || !Array.isArray(allNodes)) { console.warn("hideAllNode: allNodes 参数无效"); return; } let nodeChildren = getCustomNodes(allNodes); if (nodeChildren && nodeChildren.length > 0) { zTreeObj.hideNodes(nodeChildren); } } //模糊匹配所有符合的节点 function search(contrast, allNodes) { if (!allNodes || !Array.isArray(allNodes)) { console.warn("search: allNodes 参数无效"); return; } let nodeChildren = getCustomNodes(allNodes); if (!nodeChildren) { return; } hideAllNode(allNodes); nodeChildren.forEach((item) => { if (item.oldname) { item.sourceName = item.oldname; zTreeObj.updateNode(item); } if (contrast) { if ((item.sourceName || "").indexOf(contrast) > -1) { console.log("sourceName包含关键字"); console.log(item); console.log(item.sourceName); item.oldname = item.sourceName; item.highlight = true; let F = new RegExp(contrast, "gi"); item.sourceName = item.oldname.replace(F, function(h) { let str = '' + h + ""; return str; }); // let a = item.name // a = '' + a + "" // item.name = a zTreeObj.setting.view.nameIsHTML = true; item.checked = true; // zTreeObj.setting.view.fontCss["color"] = "#8B0000" zTreeObj.updateNode(item); zTreeObj.showNode(item); showNodePath(item); } /*zTreeObj.updateNode(item); zTreeObj.showNode(item); showNodePath(item)*/ } }); /*let searchNodes = zTreeObj.getNodesByParamFuzzy('name', contrast); console.log('searchNodes', searchNodes) searchNodes.forEach(function (node) { node.checked = true zTreeObj.showNode(node); showNodePath(node) })*/ zTreeObj.expandAll(true); } //将查找到的节点父节点按路径设置为显示 function showNodePath(node) { let parrentNodes = node.getPath(); parrentNodes && parrentNodes.forEach(function(node) { zTreeObj.showNode(node); }); } window.treeSearchCb = (value = undefined) => { let inputValue = value == undefined ? $(keyword).val() : ""; // console.log("搜索值", inputValue) nodes = zTreeObj.getNodes(); let allNodes = zTreeObj.transformToArray(nodes); let nodeChildren = getCustomNodes(allNodes); console.log("nodeChildren", nodeChildren); search(inputValue, allNodes); //当查询条件为空时,显示所有节点 console.log("inputValue", inputValue); if ((inputValue == null || inputValue === "") && nodeChildren.length >= 0) { nodeChildren.forEach(function(node) { // node.checked = false zTreeObj.showNode(node); }); // zTreeObj.expandAll(false); } }; if (dispatch == "") { //input框值改变时 $(keyword).bind("input propertychange", treeSearchCb); } else { // $(dispatch).bind('click', treeSearchCb) } };