JavaScript 节点介绍及其应用

简介: JavaScript 节点介绍及其应用

节点


  • 元素:页面中所有的标签,元素—element, 标签----元素—对象


  • 节点:页面中所有的内容(标签,属性,文本(文字,换行,空格,回车)),Node


  • 根元素:html标签


节点的属性:


获取方式


  • 可以使用标签——通过 元素+“.” 出来,


  • 可以使用属性节点.——通过 文本节点+“.” 出来)


属性包括


  • nodeType:节点的类型:


    1——标签,


    2——属性,


    3——文本


  • nodeName:节点的名字:


    标签节点——大写的标签名字,


    属性节点——小写的属性名字,


    文本节点-——#text


  • nodeValue:节点的值:


    标签节点——null,


    属性节点——属性值,


   文本节点——文本内容


节点理解探究实例


探究1:节点



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>title</title>
</head>
<body>
<div id="dv">
    <span>这是div中的第一个span标签</span>
    <p>这是div中的第二个元素,第一个p标签</p>
    <ul id="uu">
        <li>杨过</li>
        <li>郭靖</li>
        <li id="three">南帝——段智兴</li>
        <li>黄药师</li>
        <li>周伯通</li>
    </ul>
</div>
<script src="common.js"></script>
<script>
    var ulObj = my$("uu");
    console.log("uu相关节点探究----------------------")
    console.log(ulObj.parentNode);//div
    console.log(ulObj.parentNode.parentNode);//body
    console.log(ulObj.parentNode.parentNode.parentNode);//html
    console.log(ulObj.parentNode.parentNode.parentNode.parentNode);//document
    console.log(ulObj.parentNode.parentNode.parentNode.parentNode.parentNode);//null
    console.log("----------------------------------")
    //  //ul标签的父级节点
    console.log("ul相关节点探究----------------------")
    console.log(ulObj.parentNode);
    //ul标签的父级元素
    console.log(ulObj.parentElement);
    console.log(ulObj.parentNode.nodeType);//标签的---1
    console.log(ulObj.parentNode.nodeName);//标签---大写的标签名字
    console.log(ulObj.parentNode.nodeValue);//标签---null
</script>
</body>
</html>


探究2:节点属性



<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>title</title>
</head>
<body>
<div id="dv">哦哦
    <span>这是div中的第一个span标签</span>
    <p>这是div中的第二个元素,第一个p标签</p>
    <ul id="uu">
        <li>乔峰</li>
        <li>鹿茸</li>
        <li id="three">段誉</li>
        <li>卡卡西</li>
        <li>雏田</li>
    </ul>
</div>
<script src="common.js"></script>
<script>
    //div
    var dvObj = document.getElementById("dv");
    //获取里面的每个子节点
    for (var i = 0; i < dvObj.childNodes.length; i++) {
        var node = dvObj.childNodes[i];
        //nodeType--->节点的类型:1---标签,2---属性,3---文本
        //nodeName--->节点的名字:大写的标签--标签,小写的属性名---属性,#text---文本
        //nodeValue-->节点的值:标签---null,属性--属性的值,文本--文本内容
        console.log(node.nodeType + "=====" + node.nodeName + "====" + node.nodeValue);
    }
    //div
    var dvObj = document.getElementById("dv");
    //获取的是属性的节点
    var node = dvObj.getAttributeNode("id");
    console.log(node.nodeType + "----" + node.nodeName + "====" + node.nodeValue);
    //div
    var dvObj = document.getElementById("dv");
    //子节点
    console.log(dvObj.childNodes);//7个子节点
    //子元素
    console.log(dvObj.children);
</script>
</body>
</html>


探究3:亲戚节点


应用案例:节点操作隔行变色



<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>title</title>
</head>
<body>
<input type="button" value="变色" id="btn"/>
<ul id="uu">
  <li>降龙十八掌</li>
  <li>黯然销魂掌</li>
  <li>落英神剑掌</li>
  <li>铁砂掌</li>
  <li>龙象波若掌</li>
  <li>摧心掌</li>
  <li>波若掌</li>
  <li>大天龙掌</li>
</ul>
<script src="common.js"></script>
<script>
  //隔行变色--li
  my$("btn").onclick = function () {
    var count=0;//记录有多少个li
    //获取ul中所有的子节点
    var nodes = my$("uu").childNodes;
    for (var i = 0; i < nodes.length; i++) {
      //判断这个节点是不是li标签
      if (nodes[i].nodeType == 1 && nodes[i].nodeName == "LI") {
        nodes[i].style.backgroundColor=count%2==0?"red":"yellow";
        count++;//8个
        //nodes[i].style.backgroundColor = i % 2 == 0 ? "red" : "yellow";
      }
    }
  };
</script>
</body>
</html>


节点的兼容代码


element.firstChild—>谷歌和火狐获取的是第一个子几点


element.firstChild—>IE8获取的是第一个子元素


element.firstElementChild------>谷歌和火狐是第一个子元素,IE8不支持


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>title</title>
</head>
<body>
<ul id="uu">
  <li>第一个</li>
  <li>第二个</li>
  <li>第三个</li>
  <li>第四个</li>
  <li>第五个</li>
</ul>
<script src="common.js"></script>
<script>
  //第一个节点和第一个元素的获取的代码在IE8中可能不支持
  //获取任意一个父级元素的第一个子级元素
  function getFirstElementChild(element) {
    if(element.firstElementChild){//true--->支持
      return element.firstElementChild;
    }else{
      var node=element.firstChild;//第一个节点
      while (node&&node.nodeType!=1){
        node=node.nextSibling;
      }
      return node;
    }
  }
  //获取任意一个父级元素的最后一个子级元素
  function getLastElementChild(element) {
    if(element.lastElementChild){//true--->支持
      return element.lastElementChild;
    }else{
      var node=element.lastChild;//第一个节点
      while (node&&node.nodeType!=1){
        node=node.previousSibling;
      }
      return node;
    }
  }
  console.log(getFirstElementChild(my$("uu")).innerText);
  console.log(getLastElementChild(my$("uu")).innerText);
  //最后一个节点和最后一个元素的获取的代码在IE8中可能不支持
  //前一个节点和前一个元素的获取的代码在IE8中可能不支持
  //后一个节点和后一个元素的获取的代码在IE8中可能不支持
</script>
</body>
</html>
相关文章
|
2月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
631 2
|
1月前
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
181 77
|
1月前
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
124 62
|
1月前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
70 31
|
1月前
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。
|
1月前
|
JavaScript
如何使用内存快照分析工具来分析Node.js应用的内存问题?
需要注意的是,不同的内存快照分析工具可能具有不同的功能和操作方式,在使用时需要根据具体工具的说明和特点进行灵活运用。
44 3
|
1月前
|
JavaScript 前端开发 安全
JavaScript与TypeScript的对比,分析了两者的特性及在实际项目中的应用选择
本文深入探讨了JavaScript与TypeScript的对比,分析了两者的特性及在实际项目中的应用选择。JavaScript以其灵活性和广泛的生态支持著称,而TypeScript通过引入静态类型系统,提高了代码的可靠性和可维护性,特别适合大型项目。文章还讨论了结合使用两种语言的优势,以及如何根据项目需求和技术背景做出最佳选择。
58 4
|
1月前
|
机器学习/深度学习 人工智能 JavaScript
JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景
本文探讨了JavaScript和TypeScript的未来发展趋势及其在Web开发中的应用前景。JavaScript将注重性能优化、跨平台开发、AI融合及WebAssembly整合;TypeScript则强调与框架整合、强类型检查、前端工程化及WebAssembly的深度结合。两者结合发展,特别是在Vue 3.0中完全采用TypeScript编写,预示着未来的Web开发将更加高效、可靠。
45 4
|
1月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
49 5
|
1月前
|
前端开发 JavaScript 关系型数据库
基于 Vue2.0 + Nest.js 全栈开发的后台应用
Vue2 Admin 是一个基于 Vue2 和 Ant Design Pro 开发的前端项目,配合 Nest.js 构建的后端,提供了一个完整的全栈后台应用解决方案。该项目支持动态国际化、用户权限管理、操作日志记录等功能,适合全栈开发者学习参考。线上预览地址:https://vue2.baiwumm.com/,用户名:Admin,密码:abc123456。