jQuery ztree 비동기 로드 추가 서브 노드 중복 문제
ztree 는 jQuery 에 의 해 이 루어 진 다기 능'트 리 플러그 인'입 니 다.우수한 성능,유연 한 배치,다양한 기능 의 조합 은 ztree 의 가장 큰 장점 입 니 다.
ztree 는 오픈 소스 무료 소프트웨어(MIT 허가증)입 니 다.ztree 에 관심 이 있 거나 ztree 가 계속 발전 할 수 있 도록 지원 하고 싶다 면 기 부 를 할 수 있 습 니 다.
// ,
function addNode(event) {
rMenu.css({ "visibility": "hidden" });
var treeNode = zTree.getSelectedNodes()[0];
var pid;
var nodeName;
var treelevel;
if (!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) {
//
pid = 0;
treeNode = null;
treelevel = 1;
} else if (treeNode) {
//
pid = treeNode.id;
treelevel = 2;
}
$.post(
"AddNode.action",
{ type: treelevel, id: pid },
function(nodeIdAndName) {
var params = /([^\|]+)\|([^\|]+)/.exec(nodeIdAndName);
if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.open)) {
zTree.expandNode(treeNode, true);
}
treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
});
}
원래 하위 노드 를 직접 추가 할 때 부모 노드 가 전개 되 지 않 으 면 똑 같은 하위 노드 두 개 를 추가 합 니 다(첫 번 째 때).나중에 저 는 아버지 노드 의 전개 여 부 를 판단 하 였 으 나 아버지 노드 가 전개 되면 똑 같은 서브 노드 두 개 를 추가 하 는 것 이 되 었 습 니 다.이 문 제 는 어떻게 해결 해 야 합 니까?방법 1
장차
if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.open)) {
zTree.expandNode(treeNode, true);
}
treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
...로 바꾸다
if(!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0)
{
treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
}
else if(treeNode.open)
{
if(treeNode.isParent)
{
zTree.reAsyncChildNodes(treeNode, "refresh");
}
else
{
treeNode.isParent=true;
zTree.reAsyncChildNodes(treeNode, "refresh");
}
}
else
{
zTree.expandNode(treeNode, true);
treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
}
문 제 는 해결 할 수 있 지만 최적화 되 었 습 니까?고 친 코드 가 너무 많은 것 같 아 요. 최선 의 방법
이렇게 귀 찮 게 안 해도 될 것 같은 데?이틀 전 비슷 한 질문 에 답 했다.
1.하위 노드 를 추가 하려 면 ajax 를 클릭 하여 배경 에 데 이 터 를 저장 하고 success 이 벤트 를 캡 처 합 니 다.
2.ajax success 시 treeNode.zAsync 속성 을 이용 하여 이 부모 노드 가 비동기 로 불 러 온 적 이 있 는 지 알 수 있 습 니 다.false 라면 reAsyncChildNodes 를 직접 리 셋 하고 true 라면 addN 을 이용 합 니 다.
if ((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.zAsync)
treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
else
zTree.reAsyncChildNodes(treeNode, "refresh");
총결산위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 jQuery ztree 비동기 로드 에 서브 노드 중복 문 제 를 추가 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
가장 간단한 zTree 응용 사례텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.