首页 > 其他分享 >写一个方法获取页面中所有类型的节点数

写一个方法获取页面中所有类型的节点数

时间:2025-01-01 09:08:51浏览次数:5  
标签:NODE traverse 遍历 获取 类型 counts 节点 页面

在前端开发中,你可以使用JavaScript的DOM API来获取页面中所有类型的节点数。下面是一个示例方法,它使用递归函数来遍历DOM树并计算不同类型的节点数量:

function getNodeTypeCounts() {
  const counts = {
    ELEMENT_NODE: 0,
    ATTRIBUTE_NODE: 0,
    TEXT_NODE: 0,
    CDATA_SECTION_NODE: 0,
    ENTITY_REFERENCE_NODE: 0,
    ENTITY_NODE: 0,
    PROCESSING_INSTRUCTION_NODE: 0,
    COMMENT_NODE: 0,
    DOCUMENT_NODE: 0,
    DOCUMENT_TYPE_NODE: 0,
    DOCUMENT_FRAGMENT_NODE: 0,
    NOTATION_NODE: 0,
  };

  function traverse(node) {
    // 增加对应节点类型的计数
    counts[node.nodeType] += 1;

    // 遍历子节点
    const children = node.childNodes;
    for (let i = 0; i < children.length; i++) {
      traverse(children[i]);
    }
  }

  // 从document开始遍历
  traverse(document);

  return counts;
}

// 使用示例
const nodeCounts = getNodeTypeCounts();
console.log(nodeCounts);

这个方法首先定义了一个counts对象,用于存储不同类型节点的数量。然后,它定义了一个名为traverse的递归函数,该函数接收一个节点作为参数,并增加对应节点类型的计数。接下来,它遍历该节点的所有子节点,并对每个子节点调用traverse函数。最后,从document节点开始调用traverse函数,以遍历整个DOM树。最终,该方法返回包含不同类型节点数量的counts对象。

请注意,在实际应用中,你可能更关注某些特定类型的节点(例如元素节点和文本节点),而不是所有类型的节点。在这种情况下,你可以根据需要修改counts对象和traverse函数来仅计算你感兴趣的节点类型。

另外,如果你使用的是现代前端框架(如React、Vue或Angular),它们可能提供了自己的工具或方法来操作和查询DOM树。在这些情况下,你可以考虑使用框架提供的API来完成类似的任务。

标签:NODE,traverse,遍历,获取,类型,counts,节点,页面
From: https://www.cnblogs.com/ai888/p/18645244

相关文章

  • 如何获取元素的兄弟节点?
    在前端开发中,获取元素的兄弟节点可以通过JavaScript的DOMAPI来实现。以下是一些示例:获取下一个兄弟节点你可以使用nextSibling属性来获取元素的下一个兄弟节点。但请注意,nextSibling会返回下一个兄弟节点,无论它是元素节点还是文本节点(例如,空格或换行符)。如果你只关心元素节......
  • 使用js写一个方法获取某个元素中所有class和id
    在JavaScript中,你可以通过元素的className和id属性来获取一个元素的所有class和id。但需要注意,className返回的是一个包含所有class名的字符串,而不是一个数组。如果你需要一个数组,你需要自己进行分割。以下是一个简单的函数,它接受一个元素作为参数,并返回一个对象,该对象包含该元素......
  • 写个方法计算html中所有节点和子节点
    在前端开发中,你可以使用JavaScript来遍历并计算HTML中的所有节点和子节点。以下是一个简单的示例方法,它使用递归函数来遍历DOM树并计算节点数量:functioncountAllNodes(node){letcount=1;//计数当前节点//检查节点是否有子节点if(node.hasChildNodes()){......
  • Java子线程无法获取Attributes的解决方法
    在Java多线程编程中,开发者经常会遇到子线程无法获取主线程设置的Attributes的问题。Attributes通常用于存储与当前线程相关的数据,尤其在Web应用中,它们常用于请求上下文的管理。然而,由于Java线程是独立运行的,每个线程有自己的内存空间,一个线程无法直接访问另一个线程的局部变量或属......
  • springboot~多节点应用里的雪花算法唯一性
    雪花算法的唯一性,在单个节点中是可以保证的,对应kubernetes中的应用,如果是横向扩展后,进行多副本的情况下,可能出现重复的ID,这需要我们按着pod_name进行一个workId的生成,我还是建议通过不引入第三方组件和网络请求的前提下解决这个问题,所以我修改了kubernetes的yaml文件。k8s的......
  • 沉淀中,由于翻译校对太花时间,所以更多的还是做个人精简版笔记,THM博客留着慢慢填坑&如需
    对于无法直接发布或者较敏感的文章,将使用密码保护机制。博客主页的背景图片可能需要挂载VPN工具才能成功刷新。⭐需要PDF版THM笔记的可以加一下下面的知识星球,主要包含个人校对的TryHackMe中文笔记PDF版、闲鱼购买的SRC教程、网上白嫖的一些学习资源。......
  • WinForm通过反射调用dll中的串口传参数并获取返回值
    现有一dll文件MyDll.dll,里边封装了一窗口FormA,现通过FormB调用MyDll.dll中的FormA窗口,传入参数并获取到FormA的返回值(通过FormA中的按钮触发,通过FormB中的委托方法实现返回值)1.MyDll.dll文件中的FormA方法定义委托方法和该委托的事件publicdelegatevoidfrm......
  • chrome浏览器network如何查看上一个页面的请求
    前言大家好,我是小徐啊。chrome浏览器是我们在JAVA开发中常用的浏览器,其中的console和network等,都是我们常用的功能。network中,是可以看到每次的请求的,包括请求的参数和返回的数据。但有时候,页面上请求之后,会有跳转的请求,导致看不到上一个页面的请求。其实,我们可以设置的,那么,该如......
  • C# 获取 appSettings 公共类
    C#获取appSettings公共类|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|------------......
  • 如何优化瀑布流页面布局以减少空白区域?
    关于您提到的瀑布流页面布局存在过多空白区域的问题,这是一个常见的设计难题。为了实现更好的视觉效果,我们可以通过以下几种方式来优化:调整图片尺寸:瀑布流布局的核心在于图片大小不一,但如果差异过大,确实会导致空白区域增加。建议在上传图片前,先对外部图片进行预处理,使它们的宽......