• 阿桂天山的技术小结:Flask对Ztree树节点搜索定位


    话不多说,上图上源码

    1.先看效果图

    2.前端页面部分:

            1)页面

    1. <!DOCTYPE html>
    2. <HTML>
    3. <HEAD>
    4. <TITLE>Ewangda 阿桂天山的Ztree实战</TITLE>
    5. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    6. <link rel="stylesheet" href="/static/css/bootstrapStyle/bootstrapStyle.css" type="text/css">
    7. <link href="/static/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
    8. <script type="text/javascript" src="/static/js/jquery-2.2.0.min.js"></script>
    9. <script type="text/javascript" src="/static/ztree/js/jquery.ztree.core-3.5.js"></script>
    10. <script type="text/javascript" src="/static/ztree/js/jquery.ztree.excheck-3.5.js"></script>
    11. <script type="text/javascript" src="/static/ztree/js/jquery.ztree.exedit-3.5.js"></script>
    12. <!-- gtj 实现对ztree节点筛选功能用 -->
    13. <script type="text/javascript" src="/static/ztree/js/jquery.ztree.exhide-3.5.js"></script>
    14. </HEAD>
    15. <BODY>
    16. <h2>具有搜索定位功能的Ztree</h2>
    17. <div class="input-group" style="width:300px">
    18. <input type="text" id="search-input" onkeyup="autoMatchForZtree();" class="form-control" placeholder="模糊查询" style="border: 1px solid #cccccc; border-right: 0;"/>
    19. <div class="input-group-addon"><i class="glyphicon glyphicon-search"></i></div>
    20. </div>
    21. <ul id="treeDemo" class="ztree"></ul>
    22. </BODY>
    23. </HTML>

            2)前端javascript脚本

    1. <script >
    2. $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
    3. var setting = {
    4. view: {
    5. selectedMulti: false
    6. },
    7. check: {
    8. enable: true
    9. },
    10. data: {
    11. simpleData: {
    12. enable: true
    13. }
    14. },
    15. };
    16. $(document).ready(function() {
    17. $.getJSON($SCRIPT_ROOT+'/_get_tree','',function(data){
    18. var zTreeObj = $.fn.zTree.init($("#treeDemo"), setting, data);
    19. zTreeObj.expandAll(true); //---gtj 所有节点都会默认展开
    20. })
    21. });
    22. /*** 功能:gtj 搜索匹配树节点 ***/
    23. function searchChildren(keyword, children){
    24. if(children == null || children.length == 0){
    25. return false;
    26. }
    27. for(var i = 0; i < children.length; i++){
    28. var node = children[i];
    29. if(node.name.indexOf(keyword) != -1 && node.isHidden === false){
    30. return true;
    31. }
    32. var result = searchChildren(keyword, node.children);
    33. if(result){
    34. return true;
    35. }
    36. }
    37. return false;
    38. }
    39. function searchParent(keyword, node){
    40. if(node == null){
    41. return false;
    42. }
    43. if(node.name.indexOf(keyword) != -1 && node.isHidden === false){
    44. return true;
    45. }
    46. return searchParent(keyword, node.getParentNode());
    47. }
    48. var hiddenNodesForZtree = [];
    49. function autoMatchForZtree(){
    50. setTimeout(function(){
    51. var ztreeObj = $.fn.zTree.getZTreeObj("treeDemo");
    52. ztreeObj.showNodes(hiddenNodesForZtree);
    53. function filterFunc(node){
    54. var keyword = $("#search-input").val();
    55. if(searchParent(keyword, node) || searchChildren(keyword, node.children)){
    56. return false;
    57. }
    58. return true;
    59. };
    60. hiddenNodesForZtree = ztreeObj.getNodesByFilter(filterFunc);
    61. ztreeObj.hideNodes(hiddenNodesForZtree);
    62. }, 300);
    63. }
    64. </script>

    3.后端Flask代码

            1)searchztree.py

    1. #=============================================================
    2. #---------------------阿桂天山 Ewangda--------------------------
    3. import op_sql
    4. import json
    5. from flask import Flask, render_template, request
    6. app = Flask(__name__)
    7. # 前端主页面
    8. @app.route('/')
    9. def searchztree():
    10. return render_template('searchztree.html')
    11. # 后台返回所有数据
    12. @app.route('/_get_tree')
    13. def get_tree():
    14. return json.dumps(op_sql.transport())
    15. # 启动主页面
    16. if __name__ == "__main__":
    17. app.run(debug=True)

            2)连接数据库获取数据:

                    2.1)mysql建表语句及测试数据

    1. CREATE TABLE `t_ztree` (
    2. `id` int(11) NOT NULL AUTO_INCREMENT,
    3. `name` varchar(50) DEFAULT NULL,
    4. `pId` int(11) DEFAULT NULL,
    5. PRIMARY KEY (`id`)
    6. ) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8;
    7. -- ----------------------------
    8. -- Records of t_ztree
    9. -- ----------------------------
    10. INSERT INTO t_ztree VALUES ('1', 'Ewangda', '0');
    11. INSERT INTO t_ztree VALUES ('2', '数智化服务', '1');
    12. INSERT INTO t_ztree VALUES ('3', '创新视觉服务', '1');
    13. INSERT INTO t_ztree VALUES ('4', '精准系列', '2');
    14. INSERT INTO t_ztree VALUES ('5', '精细系列', '2');
    15. INSERT INTO t_ztree VALUES ('8', 'EDS企业数字服务平台', '4');
    16. INSERT INTO t_ztree VALUES ('9', 'PDS精准数字服务云平台', '4');
    17. INSERT INTO t_ztree VALUES ('23', '精工系列', '2');
    18. INSERT INTO t_ztree VALUES ('36', '精致系列', '3');
    19. INSERT INTO t_ztree VALUES ('37', 'AR智能电商', '36');
    20. INSERT INTO t_ztree VALUES ('38', '精彩系列', '3');
    21. INSERT INTO t_ztree VALUES ('39', '大屏展示', '38');
    22. INSERT INTO t_ztree VALUES ('40', '智能美唇', '37');
    23. INSERT INTO t_ztree VALUES ('41', '智能靓镜', '37');

            2.2)生成ztree数据函数文件op_sql.py

    1. def query(sql_select):
    2. conn = pymysql.connect(user="aaa", password="123xxxx", host="127.0.0.1", database="test-ztree")
    3. cursor = conn.cursor()
    4. try:
    5. cursor.execute(sql_select)
    6. result = cursor.fetchall()
    7. return result
    8. finally:
    9. conn.close()
    10. # 将数据库查询数据标准化json数据以便传入后台
    11. def transport():
    12. zNdodes = []
    13. for i in query("select id, name, pId from t_ztree;"):
    14. zNdode = {}
    15. zNdode['id'] = i[0]
    16. zNdode['name'] = i[1]
    17. zNdode['pId'] = i[2]
    18. zNdodes.append(zNdode)
    19. return zNdodes

    总结:所有内容都在这了,对你有用给个赞吧!!!

    最后要注意:要让树节点能被筛选,一定要有ztree.exhide库

                 

  • 相关阅读:
    VoLTE基础自学系列 | eSRVCC稳态呼叫切换流程
    BERT变体(1):ALBERT、RoBERTa、ELECTRA、SpanBERT
    【C++】单例模式
    腾讯云CentOS7下安装GUI图形界面
    如何实现购物车一键全选?
    Spark基础
    linux-伪首部校验和 和 icmpv6 socket组播
    vue中预览zip(完整版)
    C++小程序——“靠谱”的预测器
    智能疾病查询接口
  • 原文地址:https://blog.csdn.net/gui818/article/details/133696956