jquery zTree 비동기 로딩, 퍼지 검색 간단한 예 Sharing_jquery
본 글의 예시에서는 jquery zTree tree 플러그인의 기본적인 사용법을 설명하고 있으며, 구체적인 내용은 다음과 같습니다
1. 노드 퍼지 검색 기능: 검색이 성공하면 검색된 노드가 자동으로 강조 표시되고 위치가 지정되며 확장됩니다.
2. 노드의 비동기 로딩: 1. 클릭하여 확장할 때 데이터를 로드합니다. 2. 노드를 선택할 때 데이터를 로드합니다.
프론트엔드 코드는 다음과 같습니다.
<script type="text/javascript"> //ztree设置 var setting = { view: { fontCss: getFontCss }, check: { enable: true }, data: { simpleData: { enable: true, idKey: "id", pIdKey: "pId", rootPId: 0 } }, async: { enable: true, url: "#{getStudentsJsonUrl}", autoParam: ["id", "level"] }, callback: { beforeCheck: zTreeBeforeCheck, onNodeCreated: zTreeOnNodeCreated, beforeExpand: zTreeBeforeExpand } }; var reloadFlag = false; //是否重新异步请求 var checkFlag = true; //是否选中 //节点展开前 function zTreeBeforeExpand(treeId, treeNode) { reloadFlag = false; return true; }; //节点创建后 function zTreeOnNodeCreated(event, treeId, treeNode) { var zTree = $.fn.zTree.getZTreeObj(treeId); if (reloadFlag) { if (checkFlag) { zTree.checkNode(treeNode, true, true); } if (!treeNode.children) { zTree.reAsyncChildNodes(treeNode, "refresh"); } } }; //选中节点前 function zTreeBeforeCheck(treeId, treeNode) { var zTree = $.fn.zTree.getZTreeObj(treeId); if (!treeNode.children) { reloadFlag = true; checkFlag = true; zTree.reAsyncChildNodes(treeNode, "refresh"); } return true; } //页面加载完成 _run(function () { require(['zTree/js/jquery.ztree.all-3.5'], function () { $.ajax({ type: "POST", url: "#{getStudentsJsonUrl}", success: function (data) { if (data && data.length != 0) { //如果结果不为空 $.fn.zTree.init($("#tree"), setting, data); } else { //搜索不到结果 } } }); }); //提交 $("#inputSubmit").click(function () { var zTree = $.fn.zTree.getZTreeObj("tree"); var nodes = zTree.getCheckedNodes(true); var ids = ""; var names = ""; for (var i = 0; i < nodes.length; i++) { //遍历选择的节点集合 if (!nodes[i].isParent) { ids += nodes[i].id.replace("level" + nodes[i].level, "") + ","; names += nodes[i].name + ","; } } Simpo.ui.box.hideBox(); parent.$(".boxFrm").contents().find("#inputRange").val(names.substr(0, names.length - 1)); parent.$(".boxFrm").contents().find("#hidRange").val(ids.substr(0, ids.length - 1)); }) }); //查找节点 var lastNodeList = []; var lastKey; function searchNode() { var zTree = $.fn.zTree.getZTreeObj("tree"); var key = $.trim($("#inputSearchNode").val()); if (key != "" && key != lastKey) { nodeList = zTree.getNodesByParamFuzzy("name", key); for (var i = 0, l = lastNodeList.length; i < l; i++) { //上次查询的节点集合取消高亮 lastNodeList[i].highlight = false; zTree.updateNode(lastNodeList[i]); } zTree.expandAll(false); //全部收缩 if (nodeList.length > 0) { for (var i = 0, l = nodeList.length; i < l; i++) { //遍历找到的节点集合 if (nodeList[i].getParentNode()) { zTree.expandNode(nodeList[i].getParentNode(), true, false, false); //展开其父节点 } nodeList[i].highlight = true; zTree.updateNode(nodeList[i]); } } zTree.refresh(); // 很重要,否则节点状态更新混乱。 lastNodeList = nodeList; lastKey = key; } } //加载数据 function loadData() { var zTree = $.fn.zTree.getZTreeObj("tree"); var rootNodes = zTree.getNodes(); reloadFlag = true; checkFlag = false; for (var i = 0; i < rootNodes.length; i++) { if (!rootNodes[i].children) { zTree.reAsyncChildNodes(rootNodes[i], "refresh"); //异步加载 } } } //全部收缩 function closeAll() { var zTree = $.fn.zTree.getZTreeObj("tree"); if ($("#inputCloseAll").val() == "全部收缩") { zTree.expandAll(false); $("#inputCloseAll").val("全部展开") } else { zTree.expandAll(true); $("#inputCloseAll").val("全部收缩") } } //高亮样式 function getFontCss(treeId, treeNode) { return (treeNode.highlight) ? { color: "#A60000", "font-weight": "bold"} : { color: "#333", "font-weight": "normal" }; } </script>
<div style="width: 200px; height: 260px; overflow: auto; border: solid 1px #666;"> <ul id="tree" class="ztree"> </ul> </div>
백그라운드 코드(백그라운드에서 반환된 JSON 데이터):
public void SelStudent() { set("getStudentsJsonUrl", to(GetStudentsJson)); } public void GetStudentsJson() { List<Dictionary<string, string>> dicList = new List<Dictionary<string, string>>(); string level = ctx.Post("level"); string id = ctx.Post("id"); if (strUtil.IsNullOrEmpty(id)) { #region 加载班级 //获取当前登录用户 Sys_User user = AdminSecurityUtils.GetLoginUser(ctx); //获取当前用户关联的老师 Edu_Teacher teacher = edu_TeacService.FindByUserId(user.Id); //获取班级集合 List<Edu_ClaNameFlow> list = edu_ClaNameFlowService.GetListByTeacherId(teacher.Id); foreach (Edu_ClaNameFlow item in list) { Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("id", "level0" + item.Calss.Id.ToString()); dic.Add("pId", "0"); dic.Add("name", item.Gra.Name + item.Calss.Name); dic.Add("isParent", "true"); dicList.Add(dic); } #endregion } else { if (level == "0") { //加载学生 List<Edu_Student> list = edu_StudService.GetListByClassId(id.Replace("level0", "")); foreach (Edu_Student item in list) { Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("id", "level1" + item.Id.ToString()); dic.Add("pId", id); dic.Add("name", item.Name); dic.Add("isParent", "false"); dicList.Add(dic); } } } echoJson(dicList); }
3. 쿠키를 기반으로 zTree 트리가 새로 고쳐진 후에도 확장된 상태는 변경되지 않습니다
1. jQuery 및 zTree를 참조하는 JS 외에 쿠키를 참조하는 JS:
2. JS 코드:
$(function () { //ztree设置 var setting = { data: { simpleData: { enable: true, idKey: "id", pIdKey: "pId", rootPId: null } }, callback: { onExpand: onExpand, onCollapse: onCollapse } }; $.ajax({ type: "POST", url: "/Tech/TemplateTypeManage/GetData", success: function (data) { if (data && data.length != 0) { $.fn.zTree.init($("#tree"), setting, data); var treeObj = $.fn.zTree.getZTreeObj("tree"); var cookie = $.cookie("z_tree" + window.location); if (cookie) { z_tree = JSON2.parse(cookie); for (var i = 0; i < z_tree.length; i++) { var node = treeObj.getNodeByParam('id', z_tree[i]) treeObj.expandNode(node, true, false) } } } } }); });//end $ function onExpand(event, treeId, treeNode) { var cookie = $.cookie("z_tree" + window.location); var z_tree = new Array(); if (cookie) { z_tree = JSON2.parse(cookie); } if ($.inArray(treeNode.id, z_tree) < 0) { z_tree.push(treeNode.id); } $.cookie("z_tree" + window.location, JSON2.stringify(z_tree)) } function onCollapse(event, treeId, treeNode) { var cookie = $.cookie("z_tree" + window.location); var z_tree = new Array(); if (cookie) { z_tree = JSON2.parse(cookie); } var index = $.inArray(treeNode.id, z_tree); z_tree.splice(index, 1); for (var i = 0; i < treeNode.children.length; i++) { index = $.inArray(treeNode.children[i].id, z_tree); if (index > -1) z_tree.splice(index, 1); } $.cookie("z_tree" + window.location, JSON2.stringify(z_tree)) }
위는 트리 플러그인 zTree의 비동기 로딩과 퍼지 검색에 대한 간단한 예시 설명입니다. 모두의 학습에 도움이 되기를 바랍니다.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

위임은 비동기 프로그래밍 및 이벤트 처리 문제를 해결하기 위해 객체 간에 메소드 포인터를 전달하는 데 사용되는 유형이 안전한 참조 유형입니다. 비동기 프로그래밍: 위임을 사용하면 메소드가 다른 스레드 또는 프로세스에서 실행될 수 있으므로 애플리케이션 응답성이 향상됩니다. 이벤트 처리: 대리자는 클릭이나 마우스 이동과 같은 이벤트를 생성하고 처리할 수 있도록 하여 이벤트 처리를 단순화합니다.

제목: jQuery 팁: 페이지에 있는 모든 태그의 텍스트를 빠르게 수정하세요. 웹 개발에서는 페이지의 요소를 수정하고 조작해야 하는 경우가 많습니다. jQuery를 사용할 때 페이지에 있는 모든 태그의 텍스트 내용을 한 번에 수정해야 하는 경우가 있는데, 이는 시간과 에너지를 절약할 수 있습니다. 다음은 jQuery를 사용하여 페이지의 모든 태그 텍스트를 빠르게 수정하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 먼저 jQuery 라이브러리 파일을 도입하고 다음 코드가 페이지에 도입되었는지 확인해야 합니다. <

제목: jQuery를 사용하여 모든 태그의 텍스트 내용을 수정합니다. jQuery는 DOM 작업을 처리하는 데 널리 사용되는 인기 있는 JavaScript 라이브러리입니다. 웹 개발을 하다 보면 페이지에 있는 링크 태그(태그)의 텍스트 내용을 수정해야 하는 경우가 종종 있습니다. 이 기사에서는 jQuery를 사용하여 이 목표를 달성하는 방법을 설명하고 구체적인 코드 예제를 제공합니다. 먼저 페이지에 jQuery 라이브러리를 도입해야 합니다. HTML 파일에 다음 코드를 추가합니다.

HTML 자체는 파일을 읽을 수 없지만 다음과 같은 방법으로 파일을 읽을 수 있습니다. JavaScript(XMLHttpRequest, fetch()) 사용; 서버 측 언어(PHP, Node.js) 사용; get() , axios, fs-extra).

jQuery 요소에 특정 속성이 있는지 어떻게 알 수 있나요? jQuery를 사용하여 DOM 요소를 조작할 때 요소에 특정 속성이 있는지 확인해야 하는 상황이 자주 발생합니다. 이 경우 jQuery에서 제공하는 메소드를 사용하여 이 기능을 쉽게 구현할 수 있습니다. 다음은 jQuery 요소에 특정 속성이 있는지 확인하기 위해 일반적으로 사용되는 두 가지 방법을 특정 코드 예제와 함께 소개합니다. 방법 1: attr() 메서드와 typeof 연산자를 // 사용하여 요소에 특정 속성이 있는지 확인

jQuery는 웹 개발에 널리 사용되는 인기 있는 JavaScript 라이브러리입니다. 웹 개발 중에 JavaScript를 통해 테이블에 새 행을 동적으로 추가해야 하는 경우가 많습니다. 이 기사에서는 jQuery를 사용하여 테이블에 새 행을 추가하는 방법을 소개하고 특정 코드 예제를 제공합니다. 먼저 HTML 페이지에 jQuery 라이브러리를 도입해야 합니다. jQuery 라이브러리는 다음 코드를 통해 태그에 도입될 수 있습니다.

PHP 검색 기능은 항상 웹사이트 개발에서 매우 중요한 부분이었습니다. 왜냐하면 사용자는 필요한 정보를 찾기 위해 검색창을 자주 사용하기 때문입니다. 그러나 많은 웹사이트에서는 검색 기능 구현 시 효율성이 낮고, 검색 결과가 부정확한 등의 문제를 안고 있습니다. PHP 검색 기능을 최적화하는 데 도움이 되도록 이 문서에서는 몇 가지 팁을 공유하고 구체적인 코드 예제를 제공합니다. 1. 전체 텍스트 검색 엔진을 사용합니다. 기존 SQL 데이터베이스는 대량의 텍스트 콘텐츠를 처리할 때 효율성이 떨어집니다. 따라서 Elasticsearch, Solr 등과 같은 전체 텍스트 검색 엔진을 사용하는 것이 좋습니다.

네트워크 요청, 리소스로드, 자바 스크립트 실행 및 렌더링 최적화를 통해 H5 페이지의 성능을 향상시킬 수 있으며 매끄럽고 효율적인 페이지를 만들 수 있습니다. 자원 최적화 : 압축 이미지 (예 : TinypNG 사용), 단순화 된 코드 및 활성화 된 브라우저 캐싱. 네트워크 요청 최적화 : 파일 병합, CDN 사용 및 비동기 적으로로드하십시오. JavaScript 최적화 : DOM 작업을 줄이고, requestAnimationFrame을 사용하며, 가상 DOM을 잘 활용하십시오. 고급 기술 : 코드 세분화, 서버 측 렌더링.
