如何用JS求DOM树的最大深度?


可解决的问题:获取某一个元素节点下的子元素的最大深度。

废话不多说,直接代码,兼容所有浏览器:

代码段

function getEleDeep($element) {	
			var map = function map(cb) {
				return function(arr) {
					return Array.prototype.map.call(arr, cb);
				};
			};
			var max = function max(arr) {
				return arr.reduce(function(acc, cur) {
					if (cur >= acc) return cur;
					else return acc;
				}, arr[0]);
			};
			// 递归函数 	
			var nextChildren = function nextChildren(node) {
				// 基准条件 		
				if (node.children.length === 0) return 1;
				else {
					// 求子节点们的长度 并取最大值 			
					var deeps = map(nextChildren)(node.children);
					return 1 + max(deeps);
				}
			};
			// 计算 
			//var $ele = $element[0];
var $ele = $element;var deep = nextChildren($ele);return deep;}


具体用法:

<html lang="en">
<body>
<div id="root">
  <div >
	  <div>
		  <div>
			  <div>
				<div>
			  
				</div>
			</div>
		</div>
	</div>
   </div>
  
</div>
 <script>
		var domRoot=document.getElementById("root");
		alert(getEleDeep(domRoot))
	function getEleDeep($element) {
		// map(e => e + 1)([0, 1, 2]) 	
		// => 1, 2, 3 	
		// 类似于数组的map方法 不过这里颗粒化了 	
		var map = function map(cb) {
			return function(arr) {
				return Array.prototype.map.call(arr, cb);
			};
		};
		var max = function max(arr) {
			return arr.reduce(function(acc, cur) {
				if (cur >= acc) return cur;
				else return acc;
			}, arr[0]);
		};
		// 递归函数 	
		var nextChildren = function nextChildren(node) {
			// 基准条件 		
			if (node.children.length === 0) return 1;
			else {
				// 求子节点们的长度 并取最大值 			
				var deeps = map(nextChildren)(node.children);
				return 1 + max(deeps);
			}
		};
		// 计算 	
		var $ele = $element;
		var deep = nextChildren($ele);
		return deep;
	}
</script>
</body>

</html>

参考自https://segmentfault.com/q/1010000009620166?sort=created:

function getEleDeep($element){ 
			// map(e => e + 1)([0, 1, 2]) 
			// => 1, 2, 3 
			// 类似于数组的map方法 不过这里颗粒化了 
			var map = cb => arr => Array.prototype.map.call(arr, cb); 
			// 递归函数 
			var nextChildren = node => {
				// 基准条件 
				if (node.children.length === 0) return 1; 
				else {
					// 求子节点们的长度 并取最大值 
					var deeps = map(nextChildren)(node.children); 
					
					return 1 + max(deeps); 
				}
			}

			// 计算 
			var $ele =$element[0];
			var deep = nextChildren($ele); 
			return deep;
			
		}	

但是这种方式并不兼容IE.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
React 是一个非常流行的 JavaScript 框架,它的主要优点包括: 1. 高效的渲染:React 使用虚拟 DOM 技术,可以快速更新页面上的元素,减少了浏览器的重绘和回流,提升了页面的性能。 2. 可重用的组件:React 将 UI 拆分为独立的组件,可以将这些组件重用在不同的应用中,从而减少了代码的重复。 3. 简单易用的 API:React 的 API 设计非常简单易用,可以快速上手,而且可以和其他框架或库很好地集成。 4. 大量的社区资源:React 拥有庞大的社区,有很多优秀的组件、插件和工具可供使用。 React 的劣势包括: 1. 学习曲线较陡峭:相比传统的 DOM 操作,React 的编程模型有一定的学习曲线,需要一定的时间来熟悉。 2. 需要构建工具支持:React 应用需要使用构建工具进行打包和编译,这增加了开发成本。 React 的出现解决了传统的 DOM 操作的一些痛点,例如手动操作 DOM 很容易出错,而且性能较差,难以维护。React 使用虚拟 DOM 技术,可以快速更新页面上的元素,减少了浏览器的重绘和回流,提升了页面的性能。 虚拟 DOM 的优点包括: 1. 快速更新:虚拟 DOM 可以快速更新页面上的元素,减少了浏览器的重绘和回流,提升了页面的性能。 2. 跨平台支持:虚拟 DOM 不依赖于浏览器的实际 DOM,可以在不同的平台上使用,例如服务器端渲染、React Native 等。 虚拟 DOM 的缺点包括: 1. 需要额外的内存:虚拟 DOM 需要创建额外的数据结构来表示页面上的元素,这会占用一定的内存空间。 2. 初次渲染较慢:由于需要额外的数据结构来表示页面上的元素,虚拟 DOM 在初次渲染时会比直接操作实际 DOM 慢一些。 React Hooks 是 React 16.8 引入的新特性,它可以让函数组件拥有类组件的状态和生命周期管理能力。React Hooks 的优点包括: 1. 简化代码:使用 React Hooks 可以将状态管理和副作用的处理逻辑与 UI 逻辑分离,代码变得更加简洁。 2. 更好的可测试性:React Hooks 可以使组件的状态和副作用更容易进行单元测试。 3. 更好的复用性:使用 React Hooks 可以将组件的状态和副作用抽象为自定义 Hook,便于复用。 React Hooks 的劣势包括: 1. 学习曲线较陡峭:React Hooks 的使用需要一定的学习成本,需要理解 Hook 的实现原理和使用规则。 2. 不支持所有的生命周期:React Hooks 并不支持所有的生命周期,有些场景下需要使用类组件才能实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野狼e族

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值