html页面下拉列表中动态添加后台数据(格式化数据,显示出数据的层次感)

html页面下拉列表中动态添加后台数据(格式化数据,显示出数据的层次感)

效果图:

运行原理和技术:

当页面加载完毕,利用jquery向后台发送ajax请求,去后台拼接<select></select>中的option字符串。让后将字符串响应回来,动态添加到<select>中。其中的字符串中包含了后台的数据。

页面js代码:

 1 <script type="text/javascript">
 2     //加载部门
 3     function loadSysGroup(){
 4         var groups=document.getElementById("selectObj");
 5             if(groups == null ){
 6                 return;
 7             }
 8             $.ajax({
 9                 type:"POST",
10                 url:"<%=request.getContextPath() %>"+"/master/sysGroup_getOptions.action",
11                 dataType:"json",
12                 success:function(data){
13                     var options=data["options"];
14                     groups.innerHTML="<option value=‘0‘>--请选择--</option>"+options;
15
16                 }
17             });
18     }
19
20     //当页面加载完成后,加载部门
21     $(document).ready(function(){
22         loadSysGroup();
23     });
24 </script>
25
26  <li><label>所属部门</label><select id="selectObj" name="sysGroupId"> </select></li>

后台action和sercive方法(省去dao层查数据的方法,主要是体现加工字符串)

  1     /**action 层
  2      * ajax查询出所有的部门信息
  3     * @Title: ajaxQueryGroup
  4     * @Description: TODO(这里用一句话描述这个方法的作用)
  5     * @return
  6     * @return String    返回类型
  7     * @author 尚晓飞
  8     * @date 2014-9-4 上午11:36:15
  9      */
 10     public String ajaxQueryGroup(){
 11
 12         try {
 13
 14             String sbString=sysUserService.findQueryGroup();
 15             jsonObject.put("options", sbString);
 16
 17         } catch (Exception e) {
 18             // TODO: handle exception
 19             e.printStackTrace();
 20             return "error";
 21         }finally{
 22             out.print(jsonObject);
 23             out.close();
 24         }
 25
 26         return null;
 27     }
 28
 29
 30 /**service层的加工数据
 31      * 加载出组
 32     * @Title: findQueryGroup
 33     * @Description: TODO(这里用一句话描述这个方法的作用)
 34     * @author 尚晓飞
 35     * @date 2014-9-25 上午11:38:16
 36     * @return
 37     * @see org.ledger.service.SysUserService#findQueryGroup()
 38      */
 39     @Override
 40     public String findQueryGroup() {
 41         // TODO Auto-generated method stub
 42         StringBuffer str=new StringBuffer();
 43         //院属单位institute_unit  非院属单位research_center
 44         //第一步拼接院属单位
 45         str.append("<optgroup label=\"院属单位\">");//optgroup是页面分类,无值。
 46         MyClass myClass=new MyClass();
 47         myClass.handleSb("institute_unit", 0);//算是一个父id
 48         str.append(myClass.sb.toString());
 49         str.append("</optgroup>");
 50
 51         //第二步拼接非院属单位
 52         str.append("<optgroup label=\"非院属单位\">");
 53         MyClass myClass2=new MyClass();
 54         myClass2.handleSb("research_center", 0);
 55         str.append(myClass2.sb.toString());
 56         str.append("</optgroup>");
 57
 58         return str.toString();
 59     }
 60
 61     /**
 62      * 内部类(加工数据的主要)递归
 63     * @ClassName: myClass
 64     * @Description: TODO(这里用一句话描述这个类的作用)
 65     * @author 尚晓飞
 66     * @date 2014-9-25 上午11:46:34
 67     *本示例,第一级没有加标示,数据只有两级,如果后台数据有多个级别的话,则会显示层次关系。掌握思想
 68      */
 69     class MyClass{
 70         StringBuffer sb=new StringBuffer();
 71
 72         //拼接内容
 73         public void handleSb(String unitType,Integer num){
 74             //根据父id查询出符合条件的集合(父子关系,在数据库表中,父的主键id 是子的父级id字段的值)
 75             List<SysGroup> listGroups=sysGroupService.queryGroupsByType(unitType);
 76             //如果不为空,则进行拼接加工字符串
 77             if(listGroups!=null&&listGroups.size()>0){
 78                 int m=0;//用来记录循环的次数
 79                 num++;//用来记录运行该方法的次数
 80
 81                 for(int i=0;i<listGroups.size();i++){
 82                     sb.append("<option value=\""+listGroups.get(i).getSysGroupId()+"\">");
 83
 84                     //决定位置
 85                     //一次递归说明是一个等级,则需要层次分明,则进行加空格,至于加多少,用递归次数决定,从而显示出层次感
 86                     for(int j=1;j<num;j++){
 87                         sb.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
 88                     }
 89
 90                     //决定前边装饰的符号
 91                     if(num!=1){
 92                         if(m<(listGroups.size()-1)){
 93                             //说明循环没有到最后一次
 94                             sb.append("&nbsp;&nbsp;┠&nbsp;&nbsp;");
 95                         }else {
 96                             sb.append("&nbsp;&nbsp;┖&nbsp;&nbsp;");
 97                         }
 98                     }else {
 99                         sb.append("&nbsp;&nbsp;");
100                     }
101
102                     //添加名字
103                     sb.append(listGroups.get(i).getSysGroupName());
104                     sb.append("</option>");
105                     //循环一次了,循环次数的标示自增1
106                     m++;
107
108                     //递归。用于添加当前组的子组(如果有,则sb会添加,如果没有,该方法运行一下,进入当前层的下一次循环)
109                     handleSb(listGroups.get(i).getSysGroupId(), num);
110                 }
111
112             }
113         }
114
115     }

时间: 2025-01-13 08:15:03

html页面下拉列表中动态添加后台数据(格式化数据,显示出数据的层次感)的相关文章

ASP.NET中Literal控件的使用方法(用于向网页中动态添加内容)

原文:https://www.jb51.net/article/82855.htm 可以将 Literal 控件用作网页上其他内容的容器.Literal 控件最常用于向网页中动态添加内容.简单的讲,就是可以把 HTML 代码写到 Literal 控件上,直接呈现出来. 一.常见Literal属性 属性 描述 Text 指定 Literal 控件中显示的文本.在用户的浏览器中,这会显示为 HTML. Mode 指定控件如何处理添入其中的标记. 二.基础用法 前台 LiteralTest.aspx

android 在布局中动态添加控件

第一步 Java代码 final LayoutInflater inflater = LayoutInflater.from(this); 第二步:获取需要被添加控件的布局 Java代码 final LinearLayout lin = (LinearLayout) findViewById(R.id.LinearLayout01); 第三步:获取需要添加的布局(控件) Java代码 LinearLayout layout = (LinearLayout) inflater.inflate( R

Android 在布局容器中动态添加控件

这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理. 1.addView 添加控件到布局容器 2.removeView 在布局容器中删掉已有的控件 3.使用,来个小demo就明白了 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(save

在CFormView或对话框中动态添加CScrollView、CFormView

在CFormView或对话框中动态添加CScrollView.CFormView 本代码可以在CFormView中,根据事先画好的控件位置创建CScrollView 也可以在CDialog中创建CScrollView.CFormView等 注: 若以下代码放在CMainRightView::OnCreate(LPCREATESTRUCT lpCreateStruct)内,则GetDlgItem()函数将调用失败,因为此时控件都还未被创建! void CMainRightView::OnIniti

Android在布局中动态添加view的两种方法

一.说明 添加视图文件的时候有两种方式:1.通过在xml文件定义layout:2.java代码编写 二.前言说明 1.构造xml文件 2.LayoutInflater 提到addview,首先要了解一下LayoutInflater类.这个类最主要的功能就是实现将xml表述的layout转化为View的功能.为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是findViewById()是找xml布局文件下的具体widget控件实例化,而LayoutI

vue中动态添加div

知识点:vue中动态添加div节点,点击添加,动态生成div,点击删除,删除对应的div,其中数组的长度是动态改变的,如在from表单中应用,直接在提交方法中,获得list,获取所填的元素即可 效果: 核心代码说明(样式代码可自行修改,详细代码请参照源码): <div v-for="(v,i) in list"> <div class="form-group m-form__group row" style="padding-top: 1

Uipath 选择页面下拉列表中的选项

http://www.rpatokyo.com/ 使用Select item Activity选择页面下拉列表中的选项 在open browser中拖入Select Item Activity,配置参数 点击「Indicate on screen」选择下拉列表元素 选择需要的下拉列表中的项目,这里选择“山东航空公司” 程序运行后: ---------------------------------------------------------------- 原文地址:https://www.c

art-template循环无法显示出数据

art-template循环遍历无法显示数据原因 1.语法问题:循环语句导致的问题 2.插件问题: 用标准语法时循环数据如果引入第一个插件,会导致数据显示不出来只有引入第二个插件才可循环出数据 用原生语法时第一个插件可以显示数据,引入第二个插件也可显示出数据 3.当嵌有子循环时,父循环可显示数据而子循环无法显示数据时需要在父循环中引入子循环 原文地址:https://www.cnblogs.com/jiaoyixin/p/12030675.html

jplayer中动态添加列表曲目(js提取request中的list数据作为js参数使用)

jplayer 的播放列表使用如下: 1 $(document).ready(function(){ 2 3 new jPlayerPlaylist({ 4 jPlayer: "#jquery_jplayer_1", 5 cssSelectorAncestor: "#jp_container_1" 6 }, [ 7 { 8 title:"Cro Magnon Man", 9 mp3:"http://www.jplayer.org/aud