如何检查jstree中是否存在节点

时间:2012-03-23 15:23:23

标签: jquery jstree drag-and-drop

场景如下:我有两个jstree,第一个树包含我需要将其中一些移动到第二个jstree的节点。 到目前为止,我已设法移动他们,但没有规则。但我需要做的是: 1.只让一个节点成为整棵树的根 2.检查树中是否已存在不允许移动的节点, 但我无法弄清楚如何做到这一点。 这是第二棵树的代码(移动到的那个):

     $('#SecondTree').jstree({
            "json_data": {
                "data": data
            },
            "themes": {
                "theme": "default",
                "dots": false,
                "icons": false
            },
            "dnd": {

            },
            "crrm": {
                "move": {
                    "always_copy": "multitree"
                  }
              },

            "plugins": ["json_data", "themes", "ui", "dnd", "crrm"]

        }).bind("move_node.jstree", function (e, data) {
            if (data.rslt.r.attr("id") == data.rslt.o.attr("id")) {
                     return false;
             }


        });
    }

先谢谢你

1 个答案:

答案 0 :(得分:1)

不确定我是否理解了你的整个问题,但是,特别是,我可以帮助你解决这个问题:

“[...]检查树中是否已存在不允许移动的节点”

您必须使用crrm plugin,正如您已经尝试过的那样。我刚刚回答了一个pretty similar question,举个例子,也许你也想看看它。

在您的情况下,由于您需要在另一个树中检查节点是否存在,您可以执行以下操作:

"crrm": {
   "move": {
      "check_move": function(m) { 
         return (m.ot === m.rt) || !m.rt.get_container().find("li[id="+m.o[0].id+"]").length;
      }
   }
}

首先,我们检查是否在同一个树内移动节点,并始终允许这种情况(重新排序节点或其他)。如果你不需要,可以改变它。

然后我们检查节点是否存在:
m.o是要移动的节点。您将在放置节点的树中寻找它。

m.rt.get_container()将返回一个jQuery DOM结构,所以我们只需要使用.find(),它将返回一个由ID找到的<li>元素数组,如果没有,则为空找到。

如果我们返回TRUE(我们在同一个树中移动,或者数组为空,即在第二个树中找不到节点),则允许移动,否则不允许移动。

我希望它有所帮助!