一个月没写了,这次一次写了三个帖子
好了,这个新增后,定位到新增节点的问题我也做了好久 首先,最重要要注意的点: a.用加载数据前的节点 去操作 重新加载数据后的节点,是没有效果的 b.一定要等其数据加载完后 再去操作其节点才有效果 所以整体的思路就是:
1. 以前我做过的树节点,树只有level三级(-1,0,1) 所以我就写两个循环就解决问题了 首先获取根节点(有且仅有一个),然后用父节点标识找到父节点,然后循环父节点下面的子节点,然后循环子节点,然后通过节点标识,找到此标识 如下部分代码:
var parentId = data["SUPER_TYPE_ID"]; var id = data["BUSI_TYPE_ID"]; var level = data["level"]; var rootNode = JsVar["ruleTree"].getRootNode(); for (var i=0;i<parent["children"].length;i++){ var parentNode1 = parent["children"][i]; var nowLevel = JsVar["ruleTree"].getLevel(parentNode1); if(level-1 == nowLevel){ if(parentNode1["ID"] == parentId){ for(var i=0;i<parentNode1["children"].length;i++){//找到刷新后的同一个子节点 var node = parentNode1["children"][i]; if(node["ID"] == id){ // JsVar["ruleTree"].expandNode(parentNode); JsVar["ruleTree"].expandPath(node); JsVar["ruleTree"].selectNode(node); JsVar["ruleTree"].scrollIntoView(node); JsVar["expandData"] = null; return; } } } } }2. 看懂一个就好说了,若此树有多个层级,level(-1,0,1,2,3…)等等三个等级以上,仔细思考一下,其实每个节点都是相同的找法,无非是再深下去,level+1,子节点当成父节点,孙节点变成子节点,遍历查找,递归思想,所以:
/** * 选取节点 */ function expandSelectNode() { if(JsVar["expandData"] == null){ return; } var data = JsVar["expandData"]; var parentId = data["SUPER_TYPE_ID"]; var id = data["BUSI_TYPE_ID"]; var level = data["level"]; var rootNode = JsVar["ruleTree"].getRootNode(); selectNodeByLevel(rootNode,id,parentId,level); } /** * 定位选取的节点 递归 */ function selectNodeByLevel(parent,id,parentId,level) { for (var i=0;i<parent["children"].length;i++){ var parentNode1 = parent["children"][i]; var nowLevel = JsVar["ruleTree"].getLevel(parentNode1); if(level-1 == nowLevel){ if(parentNode1["ID"] == parentId){ for(var i=0;i<parentNode1["children"].length;i++){//找到刷新后的同一个子节点 var node = parentNode1["children"][i]; if(node["ID"] == id){ // JsVar["ruleTree"].expandNode(parentNode); JsVar["ruleTree"].expandPath(node); JsVar["ruleTree"].selectNode(node); JsVar["ruleTree"].scrollIntoView(node); JsVar["expandData"] = null; return; } } } }else { selectNodeByLevel(parentNode1,id,parentId,level); } } }再啰嗦一句,重要的事情在说一遍: 最重要要注意的点: a.用加载数据前的节点 去操作 重新加载数据后的节点,是没有效果的 b.一定要等其数据加载完后 再去操作其节点才有效果 好了 就这样,若你们还有更加优化的方法,可以一起交流咯!