Rumah hujung hadapan web tutorial js zTree异步加载时添加子节点总是重复怎么解决

zTree异步加载时添加子节点总是重复怎么解决

Mar 15, 2018 pm 04:20 PM
Tambah ke nod

这次给大家带来zTree异步加载时添加子节点总是重复怎么解决,解决zTree异步加载时添加子节点总是重复的注意事项有哪些,下面就是实战案例,一起来看一下。

zTree 是一个依靠 jQuery 实现的多功能 “树插件”。下面通过本文给大家分享jQuery zTree 异步加载添加子节点重复问题,需要的朋友参考下吧

zTree 简介

    zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。

    zTree 是开源免费的软件(MIT 许可证)。如果您对 zTree 感兴趣或者愿意资助 zTree 继续发展下去,可以进行捐助。

  • zTree v3.0 将核心代码按照功能进行了分割,不需要的代码可以不用加载

  • 采用了 延迟加载 技术,上万节点轻松加载,即使在 IE6 下也能基本做到秒杀

  • 兼容 IE、FireFox、Chrome、Opera、Safari 等浏览器

  • 支持 JSON 数据

  • 支持静态 和 Ajax 异步加载节点数据

  • 支持任意更换皮肤 / 自定义图标(依靠css)

  • 支持极其灵活的 checkbox 或 radio 选择功能

  • 提供多种事件响应回调

  • 灵活的编辑(增/删/改/查)功能,可随意拖拽节点,还可以多节点拖拽哟

  • 在一个页面内可同时生成多个 Tree 实例

  • 简单的参数配置实现 灵活多变的功能

原始问题

//添加结点, 产品和版本
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 });
   });
}
Salin selepas log masuk

原本直接添加子节点的时候,如果父节点没有展开,会添加两个一样的子节点(第一次的时候);后来我对父节点是否展开进行了判断,但是却变成了如果父节点展开,会添加两个一样的子节点(第一次的时候),这个问题要怎么解决呢?

办法一 

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 });
Salin selepas log masuk

改成

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 });
    }
Salin selepas log masuk

问题就可以解决了,但是有没有优化呢?感觉改后的代码分类太多了 

最优办法

貌似不用这么麻烦吧?前两天回答了类似的问题。

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");
Salin selepas log masuk

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

怎么发掘空白处隐藏元素

Ajax怎么实现下拉框无刷新联动

无new构建详解

jQuery实现下拉菜单导航

Atas ialah kandungan terperinci zTree异步加载时添加子节点总是重复怎么解决. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menambah TV pada Mijia Bagaimana untuk menambah TV pada Mijia Mar 25, 2024 pm 05:00 PM

Ramai pengguna semakin memihak kepada ekosistem elektronik sambung rumah pintar Xiaomi dalam kehidupan moden Selepas menyambung ke APP Mijia, anda boleh mengawal peranti yang disambungkan dengan mudah dengan telefon bimbit anda Namun, ramai pengguna masih tidak tahu cara menambah Mijia rumah mereka, maka panduan tutorial ini akan membawakan kepada anda kaedah dan langkah sambungan khusus, dengan harapan dapat membantu semua orang yang memerlukan. 1. Selepas memuat turun APP Mijia, buat atau log masuk ke akaun Xiaomi. 2. Kaedah menambah: Selepas peranti baharu dihidupkan, dekatkan telefon dengan peranti dan hidupkan TV Xiaomi Dalam keadaan biasa, gesaan sambungan akan muncul. Jika tiada gesaan muncul, anda juga boleh menambah peranti secara manual Kaedahnya ialah: selepas memasuki APP rumah pintar, klik butang pertama di sebelah kiri bawah

Tutorial menambah cakera keras baharu dalam win11 Tutorial menambah cakera keras baharu dalam win11 Jan 05, 2024 am 09:39 AM

Semasa membeli komputer, kita mungkin tidak semestinya memilih cakera keras yang besar Pada masa ini, jika kita ingin menambah cakera keras baru ke win11, kita boleh memasang cakera keras baharu yang kita beli dahulu, dan kemudian menambah partition pada komputer. Tutorial menambah cakera keras baharu dalam win11: 1. Mula-mula, kita buka hos dan cari slot cakera keras. 2. Selepas menemuinya, kita sambungkan dahulu "kabel data", yang biasanya mempunyai reka bentuk yang tidak boleh dimasukkan, terbalikkan arahnya. 3. Kemudian masukkan cakera keras baharu ke dalam slot pemacu keras. 4. Selepas memasukkan, sambungkan hujung kabel data yang satu lagi ke papan induk komputer. 5. Selepas pemasangan selesai, anda boleh meletakkannya semula ke dalam hos dan menghidupkannya. 6. Selepas boot, kita klik kanan "Komputer Ini" dan buka "Pengurusan Komputer" 7. Selepas dibuka, klik "Pengurusan Cakera" di sudut kiri bawah 8. Kemudian di sebelah kanan anda boleh

Tutorial untuk membuat pintasan desktop dengan cepat dalam Win11 Tutorial untuk membuat pintasan desktop dengan cepat dalam Win11 Dec 27, 2023 pm 04:29 PM

Dalam win11, kami boleh memulakan perisian atau fail dengan cepat pada desktop dengan menambahkan pintasan desktop dan kami hanya perlu mengklik kanan fail yang diperlukan untuk beroperasi. Tambah pintasan desktop dalam win11: 1. Buka "PC ini" dan cari fail atau perisian yang ingin anda tambahkan pintasan desktop. 2. Selepas menemuinya, klik kanan untuk memilihnya dan klik "Show more options" 3. Kemudian pilih "Send to" - "Desktop Shortcut" 4. Selepas operasi selesai, anda boleh mencari jalan pintas pada desktop.

Bagaimana untuk menambah skrip baharu dalam Tampermonkey-Bagaimana untuk memadam skrip dalam Tampermonkey Bagaimana untuk menambah skrip baharu dalam Tampermonkey-Bagaimana untuk memadam skrip dalam Tampermonkey Mar 18, 2024 pm 12:10 PM

Sambungan Chrome Tampermonkey ialah pemalam pengurusan skrip pengguna yang meningkatkan kecekapan pengguna dan pengalaman menyemak imbas melalui skrip Jadi bagaimanakah Tampermonkey menambah skrip baharu? Bagaimana untuk memadam skrip? Biarkan editor memberi anda jawapan di bawah! Cara menambah skrip baru pada Tampermonkey: 1. Ambil GreasyFork sebagai contoh Buka halaman web GreasyFork dan masukkan skrip yang anda mahu ikuti. 2. Pilih skrip , selepas memasuki halaman skrip, anda boleh melihat butang untuk memasang skrip ini 3. Klik untuk memasang skrip ini untuk datang ke antara muka pemasangan. Hanya klik di sini untuk memasang 4. Kita boleh melihat satu klik yang dipasang dalam skrip pemasangan.

Bagaimana untuk menambah tera air pada imej dalam Vue? Bagaimana untuk menambah tera air pada imej dalam Vue? Aug 19, 2023 pm 12:37 PM

Bagaimana untuk menambah tera air pada imej dalam Vue? Vue ialah rangka kerja JavaScript popular yang digunakan secara meluas untuk membina aplikasi web. Kadangkala kita perlu menambah tera air pada imej dalam aplikasi Vue untuk melindungi hak cipta imej atau meningkatkan kebolehcaman imej. Dalam artikel ini, saya akan memperkenalkan anda kepada kaedah menambah tera air pada imej dalam Vue dan memberikan contoh kod yang sepadan. Langkah pertama ialah memperkenalkan perpustakaan pihak ketiga untuk menambahkan tera air pada Vue. Adalah disyorkan untuk menggunakan watermarkj

Bagaimana untuk menyambung ke rangkaian Polygon dalam dompet MetaMask? Panduan tutorial untuk menyambung dompet MetaMask ke rangkaian Polygon Bagaimana untuk menyambung ke rangkaian Polygon dalam dompet MetaMask? Panduan tutorial untuk menyambung dompet MetaMask ke rangkaian Polygon Jan 19, 2024 pm 04:36 PM

Cara menambah rangkaian PolygonMainnet Untuk menggunakan MATIC (Polygon) dengan Metamask, anda perlu menambah rangkaian peribadi yang dipanggil "PolygonMainnet". Pemindahan masuk dengan alamat rangkaian yang salah boleh menyebabkan masalah, jadi pastikan anda menggunakan rangkaian "PolygonMainnet" sebelum memindahkan keluar daripada $MATIC. Dompet Metamask disambungkan ke mainnet Ethereum secara lalai, tetapi kami hanya boleh menambah "PolygonMainnet" dan menggunakan $MATIC. Hanya beberapa langkah salin dan tampal mudah dan anda sudah selesai. Pertama, dalam dompet Metamask, klik pada pilihan rangkaian di sudut kanan atas dan pilih "C

Outlook tersekat semasa menambah akaun [Tetap] Outlook tersekat semasa menambah akaun [Tetap] Mar 23, 2024 pm 12:21 PM

Apabila anda menghadapi masalah menambah akaun dalam Outlook, anda boleh mencuba penyelesaian berikut untuk menyelesaikannya. Biasanya ini boleh disebabkan oleh sambungan rangkaian yang rosak, profil pengguna yang rosak atau isu sementara yang lain. Melalui kaedah yang disediakan dalam artikel ini, anda boleh menyelesaikan masalah ini dengan mudah dan memastikan Outlook anda boleh berjalan seperti biasa. Outlook tersekat semasa menambah akaun Jika Outlook anda tersekat semasa menambah akaun, kemudian gunakan pembetulan ini yang dinyatakan di bawah: Putuskan sambungan dan sambung semula internet Lumpuhkan sementara perisian antivirus Buat profil Outlook baharu Cuba tambah akaun dalam mod selamat Lumpuhkan IPv6 Jalankan Sokongan Microsoft dan Pembaikan Pembantu Pemulihan Office Application Outlook Tambah Akaun Diperlukan

Cara biasa untuk menambah elemen pada tatasusunan Java Cara biasa untuk menambah elemen pada tatasusunan Java Feb 21, 2024 am 11:21 AM

Cara biasa untuk menambah elemen pada tatasusunan Java, contoh kod khusus diperlukan Dalam Java, tatasusunan ialah struktur data biasa yang boleh menyimpan berbilang elemen daripada jenis yang sama. Dalam pembangunan sebenar, kita sering perlu menambah elemen baharu pada tatasusunan. Artikel ini akan memperkenalkan kaedah biasa untuk menambah elemen pada tatasusunan dalam Java dan memberikan contoh kod khusus. Cara mudah untuk mencipta tatasusunan baharu menggunakan gelung ialah mencipta tatasusunan baharu, menyalin elemen tatasusunan lama ke dalam tatasusunan baharu dan menambah elemen baharu. Contoh kod adalah seperti berikut: //tatasusunan asal i

See all articles