前台jquery+ajax请求往页面上添加树形的js代码

 //传入当前点击节点的id,在后台代码查询出parentid=当前节点id的记录数,从而实现点击当前节点,往后台发送ajax请求,查询出子节点的集合,往父节点下拼接页面
function treeNode(pid){ //如果<li id="pid">标签下的<ul>的长度为1,则说明需要发送ajax请求,往其中添加子节点。如果长度大于1说明添加过了,不用再次发送ajax请求。直接进else中控制样式的显示和隐藏问题
if($("#"+pid).find("ul").length <= 1){
$.ax({
type:"post",
url:"<%=request.getContextPath() %>/master/sysGroup_queryFlorGroup.action",
async:false,
data:{"sysParentId":pid},
dataType:"json",
success:function(resp){
//从后台响应回来数据,获取所有的组信息的json格式的数据
var groups = resp["rows"]; //如果查询出来组信息的json数组的长度《=0为空,则说明该节点下,无自己点,不用进行拼接。
if(groups.length>0){
//遍历json数组的信息。拼接页面
for(var i=0;i<groups.length;i++){
var currentId = groups[i].sysGroupId;
//判断子节点是否还有子节点,后台封装数据的时候,封装了一个状态码
if(groups[i].hasChild == "1"){
//pid等于零,是父节点,其余都是父节点下的子节点
if("0" == pid){//第一次添加父节点
$("#firstFlorGroup").append("<li id='"+currentId+"'><input type='checkbox' name='box' value='"+currentId+"' /><a onclick=\"treeNode ('"+currentId+"')\" id='a"+currentId+"'>"+groups[i].sysGroupName+"</a></li>");
$("#"+currentId).append("<div class=\"opt\"><a href='javascript:void(0)' onclick=\"updateGroup('"+groups[i].sysGroupId+"');\">编辑 </a>|<a href='javascript:void(0)' onclick=\"deleteGroup('"+groups[i].sysGroupId+"');\">删除</a></div><div class=\"opt\">"+groups[i].sysUpdateTime+"</div>");
}else{
$("#u"+pid).append("<li id='"+currentId+"'><input type='checkbox' name='box' value='"+currentId+"' /><a onclick=\"treeNode ('"+currentId+"')\" id='a"+currentId+"'>"+groups[i].sysGroupName+"</a></li>");
$("#"+currentId).append("<div class=\"opt\"><a href='javascript:void(0)' onclick=\"updateGroup('"+groups[i].sysGroupId+"');\">编辑 </a>|<a href='javascript:void(0)' onclick=\"deleteGroup('"+groups[i].sysGroupId+"');\">删除</a></div><div class=\"opt\">"+groups[i].sysUpdateTime+"</div>");
}
//给编辑的超链接添加伪协议
$("#a"+currentId).attr("href","javascript:void(0)");
//给还有子节点的子节点设置样式,使其变成绿色显示。
$("#a"+currentId).attr("style","color: green;");
//既然有子节点,就需要往<li>标签下,添加<ul>标签,方便添加子节点的子节点
$("#"+currentId).append("<ul id='u"+currentId+"'></ul>");
}else{
//无子节点
if("0" == pid){
$("#firstFlorGroup").append("<li id='"+currentId+"'><input type='checkbox' name='box' value='"+currentId+"' />"+groups [i].sysGroupName+"<div class=\"opt\"><a href='javascript:void(0)' onclick=\"updateGroup('"+groups[i].sysGroupId+"');\">编辑</a>|<a href='javascript:void(0)' onclick=\"deleteGroup('"+groups [i].sysGroupId+"');\">删除</a></div><div class=\"opt\">"+groups[i].sysUpdateTime+"</div></li>");
}else{
$("#u"+pid).append("<li id='"+currentId+"'><input type='checkbox' name='box' value='"+currentId+"' />"+groups[i].sysGroupName+"<div class=\"opt\"><a href='javascript:void(0)' onclick=\"updateGroup('"+groups[i].sysGroupId+"');\">编辑</a>|<a href='javascript:void(0)' onclick=\"deleteGroup('"+groups[i].sysGroupId+"');\">删除 </a></div><div class=\"opt\">"+groups[i].sysUpdateTime+"</div></li>");
$("#"+currentId).append("<ul></ul>");
}
}
}
}
}
});
}else{
//当不需要发送ajax请求的时候,点击的时候都是改变其隐藏和显示的样式,实现动态效果
if($("#"+pid).find("ul").css("display")=="block"){
$("#"+pid).find("ul").css("display","none");
} else {
$("#"+pid).find("ul").css("display","block");
}
}
}

ajax请求后台的action

    public String queryFlorGroup(){
try{
//生成一个装map的list集合
List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>();
//查询出指定父id的权限集合
List<SysGroup> list = sysGroupService.queryByPId(parentId);
//生成一个事件格式的对象
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String updateTime = "";
//遍历查询出来的权限集合,进行包装数据
for(SysGroup sysGroup:list){
int hasChild = 0;
//统计【遍历出来的权限是否有子权限】
int num = sysGroupService.countChilds(sysGroup.getSysGroupId());
if(num>0){
hasChild = 1;
}
updateTime = sdf.format(sysGroup.getSysUpdateTime());
Map<String,Object> map = new HashMap<String, Object>();
map.put("hasChild", hasChild);
map.put("sysGroupId", sysGroup.getSysGroupId());
map.put("sysGroupName", sysGroup.getSysGroupName());
map.put("parentId", sysGroup.getSysParentId());
map.put("sysUpdateTime", updateTime);
listMap.add(map);
}
jsonObject.put("rows", listMap);
System.out.println(jsonObject);
}catch(Exception e){
e.printStackTrace();
}finally{
out.print(jsonObject);
out.close();
}
return null;
}

通过自己的id,是别人的父id,通过ajax请求+css样式,动态往页面上添加树形。

js+html代码

     //加载用户组
function treeNode(pid){
//判断该节点下是否已经加载了子节点。如果加载,则不执行ajax请求,而是执行else{}中样式的显示和隐藏
if($("#"+pid).find("ul").length == 0){
$.ax({
type:"post",
url:"<%=request.getContextPath() %>/master/sysGroup_queryFlorGroup.action",
async:false,
data:{"parentId":pid},
dataType:"json",
success:function(resp){
var groups = resp["rows"];
if(groups.length>0){
//如果响应回来的包装有组信息的json数组长度大于零,则遍历
for(var i=0;i<groups.length;i++){
currentId = groups[i].sysGroupId;//组的id
//如果父id不等于0,说明是二级或二级以下的节点
if("0" != pid){
//添加一个ul标签,用来装响应回来的json数据的组信息
$("#"+pid).append("<ul id='u"+pid+"'></ul>");
}
//如果该json数据中的组信息,显示其有子节点。添加的时候,同时给节点绑定onclick事件,用于自身调用自身方法,再次发送ajax请求,加载子节点
if(groups[i].hasChild == "1"){
if("0" == pid){
$("#groupTree").append("<li id='"+currentId+"'><a onclick=\"treeNode('"+currentId+"')\" id='a"+currentId+"'><cite></cite></a><a href='<%=request.getContextPath() %>/master/sysGroupRolePower_queryRolesByGroupId.action?groupId="+currentId+"' target='topFrame'>"+groups[i].sysGroupName+"</a><i></i></li>");
}else{
$("#u"+pid).append("<li id='"+currentId+"'><a onclick=\"treeNode('"+currentId+"')\" id='a"+currentId+"'><cite></cite></a><a href='<%=request.getContextPath() %>/master/sysGroupRolePower_queryRolesByGroupId.action?groupId="+currentId+"' target='topFrame'>"+groups[i].sysGroupName+"</a><i></i></li>");
}
$("#a"+currentId).attr("href","javascript:void(0)");
$("#a"+currentId).attr("style","color: green;"); }else{
//显示没有子节点,添加节点时,这里边有一个图标的不同,遮盖总的css样式。不在绑定onclick事件。
if("0" == pid){
//初始位置添加
$("#groupTree").append("<li id='"+currentId+"'><cite></cite><a href='<%=request.getContextPath() %>/master/sysGroupRolePower_queryRolesByGroupId.action?groupId="+currentId+"' target='topFrame'>"+groups[i].sysGroupName+"</a><i></i></li>");
$("#"+currentId).children("cite").css("background","url(../images/rlist.gif) no-repeat");
}else{
//动态添加完成的节点下,添加子节点
$("#u"+pid).append("<li id='"+currentId+"'><cite></cite><a href='<%=request.getContextPath() %>/master/sysGroupRolePower_queryRolesByGroupId.action?groupId="+currentId+"' target='topFrame'>"+groups[i].sysGroupName+"</a><i></i></li>");
$("#"+currentId).children("cite").css("background","url(../images/rlist.gif) no-repeat");
}
}
}
}
}
}); }else{
//当树形加载完毕后,再次点击,就是控制显示和隐藏,从而实现动态效果
if($("#"+pid).find("ul").css("display")=="block"){
$("#"+pid).find("ul").css("display","none");
$("#a"+pid).children("cite").css("background","url(../images/list.gif) no-repeat");
} else {
$("#"+pid).find("ul").css("display","block");
$("#a"+pid).children("cite").css("background","url(../images/clist.png) no-repeat");
}
}
} //当页面加载完毕时,首先自动加载父id为0的组的信息,动态添加到页面上
$(document).ready(function(){
treeNode(0);
}); <body style="background:#f0f9fd;">
<div class="lefttop"><span></span>权限分配</div> <dl class="leftmenu"> <dd><div class="title"><span><img src="<%=request.getContextPath() %>/master/images/leftico04.png" /></span>用户组</div>
<ul id="groupTree" class="menuson">
</ul> </dd> </dl> <script type="text/javascript">
$('.tablelist tbody tr:odd').addClass('odd');
</script> </body>

ajax请求后台的action

/**
* 根据自动注入的parentId来查出子组,并且返回所查出的子组是否还有子组
* @Title: queryFlorGroup
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return
* @return String 返回类型
* @author 王兴兴
* @date 2014-7-1 下午3:21:10
*/ public String queryFlorGroup(){
try{ List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>(); List<SysGroup> list = sysGroupService.queryByPId(parentId); for(SysGroup sysGroup:list){
int hasChild = 0;
//通过改组的组id,去后台查询改组下是否还有子组
int num = sysGroupService.countChilds(sysGroup.getSysGroupId());
if(num>0){
hasChild = 1;
}
Map<String,Object> map = new HashMap<String, Object>();
map.put("hasChild", hasChild);
map.put("sysGroupId", sysGroup.getSysGroupId());
map.put("sysGroupName", sysGroup.getSysGroupName());
map.put("parentId", sysGroup.getSysParentId());
map.put("sysUpdateTime", sysGroup.getSysUpdateTime());
listMap.add(map);
}
jsonObject.put("rows", listMap);
System.out.println(jsonObject);
}catch(Exception e){
e.printStackTrace();
}finally{
out.print(jsonObject);
out.close();
}
return null;
} /**
* 查询指定用户组下的子用户组个数
* @Title: countChilds
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param parentId
* @return
* @return Integer 返回类型
* @author 王兴兴
* @date 2014-6-30 下午4:39:10
*/
public Integer countChilds(String parentId){
return groupDao.count("sysParentId", parentId);
} /**
* 统计
* @Title: count
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param conds
* @return
* @return Integer 返回类型
* @author 郝鹏
* @date 2014-3-27 下午3:22:18
*/
public Integer count(String property,Object value){
Map<String, Object> conds=new HashMap<String, Object>();
conds.put(property, value);
return this.count(conds);
} /**
* 统计
* @Title: count
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param conds
* @return
* @return Integer 返回类型
* @author 郝鹏
* @date 2014-3-27 下午3:22:18
*/
public Integer count(final Map<String, Object> conds){
return this.hibernateTemplate.execute(new HibernateCallback<Integer>() { public Integer doInHibernate(Session session)
throws HibernateException, SQLException {
if(conds==null || conds.isEmpty()){
return null;
}
StringBuilder sb=new StringBuilder();
sb.append("select count(*) from "+entityClass.getName()+" where ");
//设置条件参数
Set<String> condKeys=conds.keySet();
int i=0;
for(String key:condKeys){
String k=key.replaceAll("\\.", "")+"w";
sb.append(key+"=:"+k);
if(i<condKeys.size()-1){
sb.append(" and ");
}
i++;
}
Query q=session.createQuery(sb.toString()); for(String key:condKeys){
String k=key.replaceAll("\\.", "")+"w";
q.setParameter(k, conds.get(key));
}
Number number=(Number) q.uniqueResult();
return number.intValue();
} });
}

jquery,从后台查数据,给页面上添加树形。的更多相关文章

  1. WordPress怎么在页面上添加目录

    要实现的如下功能,在页面上添加一个文章目录: 步骤:   1)在wordpress中,在Posts----Categories中建立目录, 2) 3)add new post,指定post所属的cat ...

  2. Inno Setup技巧[界面]欢迎页面上添加文字

    原文:Inno Setup技巧[界面]欢迎页面上添加文字 本文介绍在"欢迎页面添加文字"的两种方法. 界面预览: Setup技巧[界面]欢迎页面上添加文字" title= ...

  3. 紧接上篇,jQuery调用jsonp,并且在页面上展示

    在上篇中提到了spring4.1+支持jsonp的调用,做了个例子,用来在页面上展示jsonp: (js写的丑了点,本人后端出生,前端大侠们轻拍~) var Menu = function () { ...

  4. jquery 获取后台实时数据

    第一步.提醒后台处理数据1.$.ajax({}) 提交数据,2.后台返回状态3.后台开始处理数据,并每秒记录状态到 data.json 文件4.前台每秒请求 data.json 文件,直到处理完成 第 ...

  5. JS从后台获取数据,前台动态添加tr标签中的td标签

    功能描述: 要求从后台查询该省份的所有城市,然后动态的再前台固定的tr标签中添加相应的td标签来展示城市基本信息: 文章目录 #一.前台jsp及js源码 jsp:在固定的tr标签中添加一个id,通过j ...

  6. 05 HTML字符串转换成jQuery对象、绑定数据到元素上

    1 要求 将一段 HTML脚本 封装成一个字符串,将这个字符串转换成一个jQuery对象:然后将这个jQuery对象添加到指定的元素中去 2 步骤 定义字符串 var str = '<div i ...

  7. vue从后台拿数据渲染页面图片

    <div class="list-content"> <div v-for="goods in goodsList" class=" ...

  8. 在h5页面上添加音乐播放

    接到需求说要做一个h5轮播图,同时配上背景音乐. Html部分: <!--音乐开始--> <div id="music"> <div id=" ...

  9. 在rabbitmq操作页面上添加队列、交换器及绑定示图

    1.添加队列 2.添加交换器 3.绑定

随机推荐

  1. .net开发中,C# DateTime.Now 取出的时间含有星期解决办法

    1.开始→运行→输入regedit,打开注册表编辑器,找到HKEY_USERS. 2.ctrl+f 查找sShortDate(多查询几次,将所有的都查出来). 3.在右边的窗口中找到sDate项,将其 ...

  2. Nastya and King-Shamans CodeForces - 992E (线段树二分)

    大意: 给定序列a, 单点更新, 询问是否存在a[i]等于s[i-1], s为a的前缀和, a非负 考虑到前缀和的单调性, 枚举从1开始前缀和, 找到第一个大于等于s[1]的a[i], 如果相等直接输 ...

  3. python-day46--前端基础之html

    一.html是什么? 超文本标记语言(Hypertext Markup Language,HTML)通过标签语言来标记要显示的网页中的各个部分.一套规则,浏览器认识的规则 浏览器按顺序渲染网页文件,然 ...

  4. HDU 4764 Stone (巴什博弈)

    题意 Tang和Jiang玩石子游戏,给定n个石子,每次取[1,k]个石子,最先取完的人失败,Tang先取,问谁是赢家. 思路 比赛的时候想了不久,还WA了一次= =--后来看题解才发现是经典的巴什博 ...

  5. BZOJ1670 [Usaco2006 Oct]Building the Moat护城河的挖掘

    裸的凸包...(和旋转卡壳有什么关系吗...蒟蒻求教T T) 话说忘了怎么写了...(我以前都是先做上凸壳再做下凸壳的说) 于是看了下hzwer的写法,用了向量的点积,方便多了,于是果断学习(Orz) ...

  6. IScroll的诞生和缺点

    转自http://lhdst-163-com.iteye.com/blog/1239784 iscroll.js是Matteo Spinelli开发的一个js文件,使用原生js编写,不依赖与任何js框 ...

  7. Apache自带性能测试工具ab的使用

    Apache服务器套件自带ab,只要安装Apache即可,无需另行安装ab.ab位于%ApacheHome%/bin目录下(“%ApacheHome%”为Aapche安装路径),你也可以把ab.exe ...

  8. 《Python》 property、classmethod、staticmethod、isinstance、issubclass

    一.property property是一个装饰器函数 装饰器函数的使用方法:在函数.方法.类的上面一行直接@装饰器的名字 装饰器的分类: 1.装饰函数 2.装饰方法:property 3.装饰类 i ...

  9. DevExpress v17.2新版亮点—WinForms篇(三)

    用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.开篇介绍了DevExpress WinForms v17.2 Data Grid Control ...

  10. html邮件链接和锚点链接

    锚点链接: 锚点链接: 标记:<a name="XXX"></a> 取读:<a href="#XXX"></a> ...