How to drag a node from a div and drop it on to a JStree? (jstree version: 3.0.4)

被刻印的时光 ゝ 提交于 2019-12-01 10:46:05

Got the solution!! Posting my answer, as this might be useful for others who are facing similar kind of issues.

<!doctype html> 
<head>
    <title>JSTree</title>
    <link rel="stylesheet" href="css/style_jstree.css" />
    <link href="fonts/font-awesome-4.2.0/css/font-awesome.min.css" rel="stylesheet">
    <script src="js/jquery.js"></script>
    <script src="js/jstree.js"></script>
    <script>
        var arrayCollection;
        $(function() {
            arrayCollection = [
                {"id": "animal", "parent": "#", "text": "Animals", "data": {"name": "Quick"}},
                {"id": "device", "parent": "#", "text": "Devices"},
                {"id": "dog", "parent": "animal", "text": "Dogs", "icon": "fa fa-file-o"},
                {"id": "lion", "parent": "animal", "text": "Lions", "icon": "fa fa-file-o"},
                {"id": "mobile", "parent": "device", "text": "Mobile Phones", "icon": "fa fa-file-o"},
                {"id": "lappy", "parent": "device", "text": "Laptops", "icon": "fa fa-file-o"},
                {"id": "daburman", "parent": "dog", "text": "Dabur Man", "icon": "fa fa-long-arrow-right"},
                {"id": "Dalmation", "parent": "dog", "text": "Dalmatian", "icon": "fa fa-long-arrow-right"},
                {"id": "african", "parent": "lion", "text": "African Lion", "icon": "fa fa-long-arrow-right"},
                {"id": "indian", "parent": "lion", "text": "Indian Lion", "icon": "fa fa-long-arrow-right", "data": {"lastName": "Silver"}},
                {"id": "apple", "parent": "mobile", "text": "Apple IPhone 6", "icon": "fa fa-long-arrow-right"},
                {"id": "samsung", "parent": "mobile", "text": "Samsung Note II", "icon": "fa fa-long-arrow-right"},
                {"id": "lenevo", "parent": "lappy", "text": "Lenevo", "icon": "fa fa-long-arrow-right"},
                {"id": "hp", "parent": "lappy", "text": "HP", "icon": "fa fa-long-arrow-right"}
            ];
            $('#jstree').jstree({
                "plugins": ["dnd", "types"],
                'core': {
                    'check_callback': true,
                    'data': arrayCollection,
                    'themes': {
                        'dots': false,
                        'responsive': true
                    }
                },
                "types": {
                    "root": {
                        "icon": "/static/3.0.8/assets/images/tree_icon.png",
                        "valid_children": ["default"]
                    },
                    "default": {
                        "valid_children": ["default", "file"]
                    },
                    "file": {
                        "icon": "fa fa-file-o",
                        "valid_children": []
                    }
                }
            });
            $(document).on('dnd_start.vakata', function(e, data) {
                //console.log('Started dragging node from jstree');
            });
            $(document).on('dnd_move.vakata', function(e, data) {
                //console.log('Moving node from jstree to div');
            });
            $(document).on('dnd_stop.vakata', function(e, data) {
                if (data.event.target.id === 'dragTarget') {

                    var jsonElement;

                    var nodeDragged = $(data.element).clone();
                    // $('#dragTarget').append(nodeDragged);
                    if (data.data.jstree && data.data.origin)
                    {
                        jsonElement = data.data.origin.get_node(data.element);

                        var id = jsonElement.id;
                        var icon = jsonElement.icon;
                        var parent = jsonElement.parent;
                        var parents = jsonElement.parents.join();
                        var text = jsonElement.text;

                        var divElement = '<div data-id=\'' + id + '\' data-text=\'' + text + '\' data-icon=\'' + icon + '\' data-parent=\'' + parent + '\' draggable=true><i class=\'' + icon + '\'></i>&nbsp' + text + '</div>';
                        $('#dragTarget').append(divElement);

                        arrayCollection = arrayCollection
                                .filter(function(el) {
                                    return el.id !== id;
                                });

                        resfreshJSTree();

                    }

                }
            });
        });

        function resfreshJSTree() {
            $('#jstree').jstree(true).settings.core.data = arrayCollection;
            $('#jstree').jstree(true).refresh();
        }


    </script>
</head>
<body>
    <div id="jstree" style="float: left; width: 500px"></div>
    <div id="dragTarget" style="float: left; width: 750px; height: 750px; background-color: skyblue; text-align: center">
        <h3>Dropped Items</h3>
    </div>
    <script>

        var draggedDivElement;

        document.getElementById('dragTarget').addEventListener('dragstart', function(evt) {
            console.log("The 'dragstart' event fired.");
            var jsonElement = new Object();
            var divElement = evt.target;
            jsonElement.id = divElement.getAttribute('data-id');
            jsonElement.text = divElement.getAttribute('data-text');
            jsonElement.icon = divElement.getAttribute('data-icon');
            jsonElement.parent = divElement.getAttribute('data-parent');
            evt.dataTransfer.setData('jsonElement', JSON.stringify(jsonElement));
            draggedDivElement = divElement;
        }, false);

        document.addEventListener("dragover", function(evt) {
            console.log("The 'dragover' event fired.");
            evt.preventDefault(); // Prevent the default behavior in order to enable dropping.
        }, false);

        document.getElementById('jstree').addEventListener("drop", function(evt) {
            console.log("The 'drop' event on jsTree fired.");
            evt.preventDefault(); // Prevent the default action to open as link for some elements. 
            arrayCollection.push(JSON.parse(evt.dataTransfer.getData('jsonElement')));
            resfreshJSTree();
            if(draggedDivElement!==null){
                draggedDivElement.innerHTML = '';
            }            
        }, false);

    </script>
</body>
</html>
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!