javascript - 如何反射(reflect)JStree对原始XML的更改?

标签 javascript jquery xml jquery-ui

我正在使用 JStree 显示 XML 文件,显示后用户可以创建、重命名或删除某些节点,并且确保这些更改仅出现在显示的 xml 上,而不反射(reflect)在原始文件上,我想知道如何在单击提交按钮后将这些更改反射(reflect)到原始 XML 文件中,或者至少如何更改数据。

更新

代码:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>menu-editor</title>
<script type="text/javascript" src="src/jquery-1.10.1.min.js"></script>
<script type="text/javascript" src="src/jstree/jquery.cookie.js"></script>
<script type="text/javascript" src="src/jstree/jquery.hotkeys.js"></script>
<script type="text/javascript" src="src/jstree/jquery.jstree.js"></script>
<link href="themes/!style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="src/jstree/!script.js"></script>
<script type="text/javascript" src="src/UIMTreeProcessor.js"></script>


<style type="text/css">
.
.
.
//css stuff
</style>

</head>

<body>
<div id="dummy"></div>
<div id="mylist">
<li id='root'><a href='#'>Root node</a><ul><li><a href='#'>Child node</a></li></ul></li>
</div>

<div id="submit" class="submit_btn">Submit</div>

</body>
<script type="text/javascript" class="source below">
var _url = "cafe.xml";
        var _uimTree = null;

        $(function () {
            getTopContent();
        });

        getTopContent = function(){
            $.ajax({
                type: "GET",
                url: _url,
                dataType:"xml",
                cache: false,
                beforeSend:function(){
                    //do something before send
                },
                success: function(data){
                    processXML(data);
                },
                error:function(e){
                    alert("Error: "+e);
                }
            });
        }       

        processXML = function(root){
            _uimTree = new UIMTreeProcessor(root, $("#mylist"));
            _uimTree.doProcess(); 


        }


$('#submit').on('click',function(){ 

      //alert the entire XML after edits via (getXML)

});

</script>

以及UIMtreeprocessor库代码

function UIMTreeProcessor(data, treeEl) {
    this.data = data;
    this.treeEl = treeEl;
}

UIMTreeProcessor.prototype.initTree = function(data){
    this.treeEl.jstree({
        "json_data" : {
            "data":data,
            "progressive_render":"true"
        },
        "plugins" : ["themes","json_data","ui","crrm","cookies","dnd","search","types","hotkeys","contextmenu"],
        "core":{"animation":0}
        });
}

UIMTreeProcessor.prototype.doProcess = function(){
    //Find root:
    var _root = $(this.data).children(':first-child');
    var _a_feed = new Array();

    this.vsTraverse($(_root), _a_feed);

    var _treedata = [{"data":_root[0].nodeName,"children":_a_feed, "state":"open"}];
    this.initTree(_treedata);
}

UIMTreeProcessor.prototype.vsTraverse = function(node, arr){
    var _ch = $(node).children();

    for(var i=0; i<_ch.length; i++){
        var _vsArr = new Array();
        this.vsTraverse(_ch[i], _vsArr);
        var _a_att = this.vsTraverseAtt(_ch[i]);
        if(null!=_a_att){
            _vsArr.push([{"data":"Attributes "+"["+_ch[i].nodeName+"]","children":_a_att, attr : { "class" : "uim_attr"}}]);
        }
        if(null!=_ch[i].firstChild && 3==_ch[i].firstChild.nodeType){
            arr.push([{"data":_ch[i].nodeName + ": " + _ch[i].firstChild.textContent,"children":_vsArr, "state":"open"}]);
        }else{
            arr.push([{"data":_ch[i].nodeName,"children":_vsArr, "state":"open"}]);
        }

    }
}

UIMTreeProcessor.prototype.vsTraverseAtt = function(node){
    var _a_atts = null;
    if(null!=node.attributes && node.attributes.length > 0){
        _a_atts = new Array();
        for(var i=0; i<node.attributes.length; i++){
            _a_atts.push(node.attributes[i].nodeName + ":" + node.attributes[i].nodeValue);
        }
    }
    return _a_atts;
}

最佳答案

编辑:我原来的答案确实是错误的。

xml_data中有一个get_xml方法插件,它应该做你所描述的事情。我自己还没有测试过它,但如果它是类似于 json_data.getJSON 的内容,输出将包含您不希望将其放回 XML 中的各种 JStree 元数据。

关于javascript - 如何反射(reflect)JStree对原始XML的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19665812/

相关文章:

javascript - 将对象固定在给定坐标上

javascript - 将 props 从父组件发送到子组件并在子组件中更新它们(ReactJs)

javascript - JQuery 可拖动堆栈在放置后中断

c# - 如何将 schemaLocation 属性添加到 XML 文档

javascript - 如何将动态填充表格的信息显示到弹出窗口中?

javascript - Bing map API - 删除图钉

jquery - 如何有条件地将 jQuery Sortable UI 小部件应用到表(ASP.NET GridView)?

jquery - 如何在 jquery 的行上添加鼠标悬停事件?

c++ - Qt 5.5 setDevice() 定义

c++ - 回滚 XML 功能