一种定义父子节点关系的方法

先说下场景:手头有一个web项目,因为业务需要,需要在父级节点下增加子节点,项目本身比较复杂,经过考虑,在不增加字段的情况下,做较小代码改动的实现方法如下。

1、项目中目前父节点存储生长方向为正向,并且已经存储了大量的数据

1,2,3,4,5....

2、单个父节点id下的子节点个数不是特别多,允许子节点最大个数为999个,所有的子节点childid定义为:

-(id*1000)+1

-(id*1000)+2

...(id*1000)+999

即父节点

1 对应的子节点为-999,-998,-997,-1等

2 对应的子节点为-1999,-1998,-1997...,-1001

3、通过子节点child查父节点id方法为

id=(Math.abs(childid) - Math.abs(childid) % 1000) / 1000 + 1

-998的父节点即为:(998-998)/1000+1=1

-1997的父节点即为:(1997-997)/1000+1=2

4、查找指定父节点id的所有子节点范围为

{-id*1000+1,-id*1000+999}

1的子节点范围为{-999,-1}

2的子节点范围为{-1999,-1001}

通过以上的方式,即可不影响父节点id的向上生长,同时也能保证子节点,父节点区分(只需要在现有方法内根据正负值做逻辑处理即可)。

原文地址:https://www.cnblogs.com/zhaogaojian/p/12306806.html

时间: 2024-07-30 15:34:22

一种定义父子节点关系的方法的相关文章

【Java基础】几种简单的调用关系与方法

直接上代码吧. 1 class lesson4AB 2 //同一个类下的public修饰的方法A,B可以相互调用 3 { 4 public void A() 5 { 6 B();//等价于this.B(); 7 } 8 public void B() 9 { 10 A();//等价于this.A(); 11 } 12 } 13 class lesson4C 14 //存在于不同类里的public修饰的方法C调用B 15 { 16 public void C() 17 { 18 lesson4AB

Delphi函数指针的两种定义(对象方法存在一个隐藏参数self,所以不能相互赋值)

delphi中经常见到以下两种定义 Type TMouseProc = procedure (X,Y:integer); TMouseEvent = procedure (X,Y:integer) of Object; 两者样子差不多但实际意义却不一样, TMouseProc只是单一的函数指针类型; TMouseEvent是对象的函数指针,也就是对象/类的函数/方法 区别在于类方法存在一个隐藏参数self,也就是说两者形参不一样,所以不能相互转换 这也就是为什么delphi中可以这样赋值 but

ExtJS学习-------Ext.define的别名和备用名,两种定义静态方法的方法,混入属性和其他属性

(1)Ext.define起别名和备用名 Ext.onReady(function(){ Ext.define('User',{ config:{ name:'张三', age:23 }, //使用别名 alias:'alias_user', //使用备用名 alternateClassName:'alternateClassName_user', constructor:function(config){//构造器 var me=this; me.initConfig(config); } }

Spring和SpringMVC父子容器关系初窥

一.背景 最近由于项目的包扫描出现了问题,在解决问题的过程中,偶然发现了Spring和SpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析和理解Spring和SpringMVC的父子容器关系并且给出Spring和SpringMVC配置文件中包扫描的官方推荐方式. 二.概念理解和知识铺垫 在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上

DOM节点关系

定义 节点中的各种关系可以用传统的家族关系来描述,相当于把文档树比喻成家谱. 属性 [nodeType.nodeName.nodeValue] 每个节点都有这三个属性,且节点类型不同,这三个属性的值不同.对于元素节点来说,nodeType的值为1,nodeName保存的始终都是元素的全大小标签名,而nodeValue的值则始终是null <div class="box" id="box"></div> <script> var o

jacascript DOM节点——节点关系与操作

前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 节点关系 DOM可以将任何HTML描绘成一个由多层节点构成的结构.每个节点都拥有各自的特点.数据和方法,也与其他节点存在某种关系.节点之间的关系构成了层次,而所有页面标签则表现为一个以特定节点为根节点的树形结构,也就是DOM树.下图为各节点之间的关系: 父级属性 parentNode 和 parentElement 每个节点都有一个 parentNode 属性,该属性指向文档树中的父节点.对于一个节点来

Day53:DOM对象(节点关系、查找、操作)

一.DOM对象 1.什么是HTML DOM HTML  Document Object Model(文档对象模型) HTML DOM 定义了访问和操作HTML文档的标准方法 HTML DOM 把 HTML 文档呈现为带有元素.属性和文本的树结构(节点树) 2.DOM树          画dom树是为了展示文档中各个对象之间的关系,用于对象的导航. 3.DOM节点 3.1 节点类型: HTML 文档中的每个成分都是一个节点. DOM 是这样规定的:    整个文档是一个文档节点 .(docume

javascript学习笔记:DOM节点关系和操作

0x01:前面的话 DOM可以将任何HTML描绘成一个由多层节点构成的结构.节点分为12种不同类型,每种类型分别表示文档中不同的信息及标记.每个节点都拥有各自的特点.数据和方法,也与其他节点存在某种关系.节点之间的关系构成了层次,而所有页面标记则表现为一个以特定节点为根节点的树形结构.本文将详细描述DOM间的节点关系和基础的DOM操作.节点中的各种关系可以用传统的家族关系来描述,相当于把文档树比喻成家谱.接下来,将把DOM节点关系分为属性和方法两部分进行详细说明. 0x02:属性 父级属性par

Javascript学习笔记:3种定义函数的方式

①使用函数声明语法定义函数 1 function sum(num1,num2){ 2 return num1+num2; 3 } ②使用函数表达式定义函数 1 var sum=function(num1,num2){ 2 return num1+num2; 3 } ③使用Function构造函数定义函数 1 var sum=new Function('num1','num2','return num1+num2'); 三种定义函数的方式,其中第二和第三种从技术角度讲都属于函数表达式的方式,但是不