js递归树结构

利用递归实现简单的树结构菜单

 

数据格式:

var data = [
  {title: "11111",childs : [
    {title:"aaaaa", childs:[
      {title: "xg"}
    ]},
    {title:"bbbbb"}
    ]
  },
  {title: "22222",childs : [
    {title:"aaaaa"},
    {title:"bbbbb"}
    ]
  }
];

递归函数:

function menu(data){
  var ul = "<ul>";
  for(var i = 0; i < data.length; i++){
    ul+="<li><a>"+data[i].title+"</a>";
    if(data[i].childs){ul+=argument.callee(data[i].childs);}
    ul+="</li>";
  };
  ul+="</ul>";
  return ul;
}

调用:

var menu = menu(data);

结果:

也可以做成jq插件

var Menu = function(el,opt){
  this.el = el;
  //this.default = {},       // 插件默认参数,在这里不需要
  this.opt = opt;
  // this.opt = $.extend({},this.default,opt);     // 插件默认参数和传参合并,在这里不需要
};
Menu.prototype = {
  init: function(){
    var opt = this.opt;
    var ul = this.create(opt);
    this.el.append(ul);
},
create: function(opt){
  var ul = ‘<ul>‘;
  for(var i = 0; i < opt.length; i++){
    ul += ‘<li>‘+opt[i].title;
    if(opt[i].childred && opt[i].children != ‘undefined‘){
      ul += arguments.callee(opt[i].childred)
    }
    ul += ‘</li>‘;
  };
  ul += ‘</ul>‘;
  return ul;
}
}
$.fn.menu = function(opt){

  // 这里的this是指$(select);
  var menu = new Menu(this, opt);
  return menu.init();
}

调用: $(select).menu(data);

原文地址:https://www.cnblogs.com/java-llp/p/10873539.html

时间: 2024-10-05 23:25:16

js递归树结构的相关文章

js 递归学习

作用:将一些复制的算法变为简单,比如:(举例子)计算数组 var  a =[1,3,4,6,7,8]的长度:求 5!的值,也可以做搜索用等. //求数组的长度function len(arry){ if(arry[0] == null && arry[0]==undefined) return 0; else{ arry.shift(); return 1+ len(arry) } } //求5! function factorial(n){ if(n == 0 ){ return 1;

js中树结构根据条件查找节点返回节点路径的一些思路

今天在项目中遇到一个问题,需要根据数据库中记录的树结构节点id获取该记录所在目录节点的路径. 大致想法,首先定义变量保存当前路径,然后递归遍历该树节点,在遍历的过程中将遍历到的节点加入到当前路径中,找到该节点后终止递归,最后返回路径即可. 问题,怎样保存当前判断节点的路径以及未找到节点时对路径的处理方法. 现附上代码: var getPathById = function (id, catalog, callback) { //定义变量保存当前结果路径 var temppath = ""

java递归、js递归,无限极分类菜单表

java-json import com.alibaba.fastjson.JSONObject; import java.util.ArrayList; import java.util.List; /** * @Description: 菜单工具类 * @version: V1.0 */ public class MenuTreeUtil { /** * @return * @Author * @Param nodes :所有的节点列表 */ public List data(List<JS

JS递归状态回退

export default (str) => { if (str.length < 1) return [] // 映射数组 const map = ['', 1, 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']; if (str.length < 2) return map[str].split('') const numArr = str.split(""); // 返回数组 let code

js递归实现包名转换成对应的层级对象c

示例:由原对象{a: {test: 1, b: 2}} 根据a.b.c.d这样的包名转换为:{"a":{"test":1,"b":{"c":{"d":{}}}}} 说明:包名有"."分隔,本身代表着层级结构,而json对象本身也是由属性和值构成的,允许嵌套,因此现在就有一个需求,把包的描述字符串,转换成json类型,条件是要注意到已经存在的其他属性.本例中属性a的值是对象,因此要保留该,

js 递归

<script> //递归 function test(n) { if (n == 1) { return 1 } console.log(n) return n * test(n - 1) } console.log(test(3)) </script>

JS递归

普通写法: var twoLevel = data['result']; //console.log(twoLevel.length); 4 var html = ""; for (var i = 0; i < twoLevel.length; i++) { var threeLevel = twoLevel[i].children; if (threeLevel.length > 0) { html += "<li><a class='inac

js处理json js递归

1 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

js Dom树结构分析

对Dom数结构的理解,对用js操作html元素有很大的意义 先来看一下下面这段html代码:(这里就以分析body中的元素来解释,因为我们基本所有的操作基本都围绕body标签来做的) 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="t