下拉列表展示生成树结构

旧城等待, 2023-06-26 10:48 22阅读 0赞

PHP:

  1. public function tree($item = [], $pid=0, $level=1)
  2. {
  3. $data = array();
  4. foreach($item as $key=>$val) {
  5. if($val->parentid == $pid) {
  6. $val->level = $level;
  7. $val->sub = $this->tree($item, $val->id, $level+1);
  8. $data[] = $val;
  9. }
  10. }
  11. return $data;
  12. }

HTML:

  1. <select class="form-control" id="selectbox" name="type_id" id="type"></select>

JS:

  1. $(function () {
  2. function listToTree(list, pid)
  3. {
  4. var ret = [];//一个存放结果的临时数组
  5. for(var i in list) {
  6. if(list[i].parentid == pid) {//如果当前项的父id等于要查找的父id,进行递归
  7. list[i].children = listToTree(list, list[i].id);
  8. ret.push(list[i]);//把当前项保存到临时数组中
  9. }
  10. }
  11. return ret;//递归结束后返回结果
  12. }
  13. var jj = '{!! $typeModels !!}';
  14. var tree=listToTree(JSON.parse(jj), 0);//调用函数,传入要转换的list数组,和树中顶级元素的pid
  15. //js脚本,递归生成
  16. //获取容器对象
  17. var selectbox=document.getElementById("selectbox");
  18. //生成树下拉菜单
  19. var j="";//前缀符号,用于显示父子关系,这里可以使用其它符号
  20. function creatSelectTree(d){
  21. var option="";
  22. for(var i=0;i<d.length;i++){
  23. if(d[i].children.length){//如果有子集
  24. if(defaultId == d[i].id) {
  25. option+="<option selected value='"+d[i].id+"'>"+j+d[i].name+"</option>";
  26. } else {
  27. option+="<option value='"+d[i].id+"'>"+j+d[i].name+"</option>";
  28. }
  29. j+="└─";//前缀符号加一个符号
  30. option+=creatSelectTree(d[i].children);//递归调用子集
  31. j=j.slice(0,j.length-1);//每次递归结束返回上级时,前缀符号需要减一个符号
  32. }else{//没有子集直接显示
  33. if(defaultId == d[i].id) {
  34. option+="<option selected value='"+d[i].id+"'>"+j+d[i].name+"</option>";
  35. } else {
  36. option+="<option value='"+d[i].id+"'>"+j+d[i].name+"</option>";
  37. }
  38. }
  39. }
  40. return option;//返回最终html结果
  41. }
  42. //调用函数,并将结构出入到下拉框容器中
  43. var defaultOption = "<option value=''>请选择</option>";
  44. var defaultId = '{
  45. {$type_id}}';
  46. selectbox.innerHTML = defaultOption + creatSelectTree(tree, defaultId);
  47. });

20191231151639493.png

发表评论

表情:
评论列表 (有 0 条评论,22人围观)

还没有评论,来说两句吧...

相关阅读