zoukankan      html  css  js  c++  java
  • js学习(十一)-- DOM的简介、事件简单介绍、文档加载、DOM查询


    (https://www.w3school.com.cn/js/js_htmldom.asp)

    DOM简介(P91)

    DOM全称:Document Object Model文档对象模型
    JS中通过DOM来对HTML文档进行操作,只要理解了DOM就可以随心所欲的操作WEB页面

    • 文档
      整个HTML网页文档
    • 对象
      将网页中的每一个部分都转换为一个对象
    • 模型
      实用模型来表示对象之间的关系,方便获取对象

    节点

    节点Node,是构成我们网页的最基本组成部分,网页中的每一部分都可以成为是一个节点
    文档节点:整个HTML文档
    元素节点: HTML文档中的HTML标签
    属性节点: 元素的属性
    文本节点: HTML标签中的文本内容

    浏览器已经为我们提供了文档节点,这个对象是window属性
    可以在页面中直接使用,文档节点代表的是整个网页

    <button id = "btn">按钮</button>
    
    <script type = "text/javascript">
    //获取到按钮对象
    var btn = document.getElementById("btn");
    //修改按钮的文字
    btn.innerHTML = "I`m Button";
    </script>
    
    • innerHTML
      返回节点的内容包括html标签
    • innerText
      返回节点的内容,去除html标签

    事件

    (https://www.w3school.com.cn/jsref/dom_obj_event.asp)
    事件就是文档或浏览器窗口中发生的一些特定的交互瞬间
    js和HTML之间的交互是通过事件实现的
    比如点击按钮。鼠标移动,关闭窗口

    可以在事件对应的属性中设置一些js代码,当事件被触发时,这些代码将会执行

    <button id = "btn" onclick="alert("hello world!");">按钮</button>
    这种写法我们称为结构和行为耦合,不方便维护,不推荐使用
    

    推荐使用)在js中写,可以为按钮的对应事件绑定处理函数的形式来响应事件

    <button id = "btn" onclick="alert("hello world!");">按钮</button>
    
    <script type = "text/javascript">
    //获取到按钮对象
    var btn document.getElementById("btn");
    //为按钮绑定一个单击事件
    //当事件处触发时,其对应的函数将会被调用
    btn.onclick = function(){
          alert("hello world!");
    };
    </script>
    

    文档的加载

    浏览器在加载一个页面的时候,是按照至上向下的顺序加载的
    读取到一行就运行一行
    如果将script标签写到页面的上边
    在执行代码时,页面还没有加载

    使用onload让页面加载完成之后再执行

    <script type = "text/javascript">
    window.onload = function(){
          //获取到按钮对象
          var btn document.getElementById("btn");
          //为按钮绑定一个单击事件
          //当事件处触发时,其对应的函数将会被调用
          btn.onclick = function(){
                alert("hello world!");
          };
    }
    </script>
    

    可用于打开页面后的自动加载,也可让代码不受HTML的顺序限制

    DOM的查询

    (https://www.w3school.com.cn/jsref/dom_obj_document.asp)

    获取元素节点

    通过document对象调用
    getElementById()
    通过id属性获取一个元素节点对象
    getElementsByTagName()
    通过标签名获取一组元素节点对象
    var lis = document.getElementsByTagName("li");
    这个方法会给我们返回一个类数组对象,所有查询到的元素都会封装到对象中
    getElementsByName()
    通过name属性获取一组元素节点对象

    <input type="radio" name="gender" value="male"/>
    <script>
    var inputs = documnet.getElementsByName("gender");
    alert(inputs.length);
    /*
     *innerHTML用于获取元素内部的HTML代码的内容,对于自结束标签,这个属性没有意义
     */
    </script>
    

    获取元素节点的子节点

    通过具体的元素节点调用
    getElementsByTagName()
    方法,返回当前节点的指定标签名后代节点
    childNodes
    属性,表示当前节点的所有子节点
    会获取包括文本节点在内的所有节点
    根据DOM标签间空白也会当成文本节点
    children
    children属性可以获取当前元素的所有子元素,不包括空白部分
    firstChild
    属性,表示当前节点的第一个子节点(包括空白文本节点)
    firstElementChild
    获取当前元素的第一个子元素
    lastChild
    属性,表示当前节点的最后一个子节点

    <ul id = "city">
          <li id="bj">beijing</li>
          <li >shanghai</li>
          <li >tokyo</li>
          <li >shouer</li>
    </ul>
    
    <script>
    var btn04 = document.getElementById("btn04");
    btn04.onclick = function(){
          //获取id为city的元素
          var city = document.getElementById("city");
          //查找#city下所有li节点
          city.getElementsByTagName("li");
          //返回#city的所有子节点
          var cns = city.childNodes;
    
    }
    </script>
    

    获取父节点和兄弟节点

    通过具体的节点调用
    parentNode
    属性,表示当前节点的父节点
    previousSibling
    属性,表示当前节点的前一个兄弟节点(也可能获取到空白文本)
    previousElementSibling
    获取前一个兄弟元素,不包括空白
    nextSibling
    属性,表示当前节点的后一个兄弟节点(也可能获取到空白文本)
    nextElementSibling
    获取后一个兄弟元素,不包括空白

    节点的属性

    //元素节点   nodeName  标签名   nodeType 1  nodeValue  null
    //属性节点   nodeName  属性名   nodeType 2  nodeValue  属性值
    //文本节点   nodeName  #text   nodeType 3  nodeValue  文本的值
    
    var fc = bj.firstChild;
    alert(fc.nodeValue);
    

    DOM查询补充

    获取body标签对象

    var body = document.body;
    

    获取html根标签

    var html = document.documentElement;
    

    获取所有元素

    var all = documnet.all;
    或者 all = document.getElementsByTagName("*");
    for(var i=0;i<all.length;i++){
          console.log(all[i]);
    }
    

    根据元素的class属性查询一组元素的结点对象

    • getElementsByClassName()返回的是数组
    var box1 = document.getElementsByClassName("box1");
    

    ie8不支持,一般不用

    querySelector和querySelectorAll

    • querySelector
      需要一个选择器的字符串作为参数,可以根据一个CSS选择器来查询一个元素节点对象
    <body>
          <div class = “box1”>
                <div></div>
          </div>
    </body>
    <script>
    var div = documnet.querySelector(".box1 div");
    </script>
    

    只会找第一个class为box1的,后面的就管不着了

    • querySelectorAll
      可以找到所有的class为box1的元素,即使符合条件的元素只有一个,他也会返回数组

    练习

    <html>
    
    <head>
      <script type="text/javascript">
        window.onload = function () {
    
          var items = document.getElementsByName("items");
          //全选按钮,点击按钮后,四个多选框全都被选中
          //1,#checkAllBtn
          //为id为checkedAllBtn的按钮绑定一个单机响应函数
          var checkedAllBtn = document.getElementById("checkedAllBtn");
          checkedAllBtn.onclick = function(){
            //设置四个多选框变成选中状态
      
            //遍历items
            for(var i=0;i<items.length;i++){
              items[i].checked=true;
            }
            checkedAllBox.checked=true;
          }
    
          //全不选
          var checkedNoBtn = document.getElementById("checkedNoBtn");
          checkedNoBtn.onclick = function(){
        
            for(var i=0;i<items.length;i++){
              items[i].checked=false;
            }
            checkedAllBox.checked=false;
          }
    
          //反选
          var checkedRevBtn = document.getElementById("checkedRevBtn");
          checkedRevBtn.onclick = function(){
            
            checkedAllBox.checked=true;
            for(var i=0;i<items.length;i++){
            
              items[i].checked=!items[i].checked;
              if(!items[i].checked){
                  checkedAllBox.checked=false;
                }
            }        
          }
    
          //提交,获取名字
          var senBtn = document.getElementById("senBtn");
          senBtn.onclick = function(){
            var str="";
            for(var i=0;i<items.length;i++){
              if(items[i].checked){
                str=str+items[i].value+",";
              }
            }
            alert(str);
          }
    
          //checkbox的全选/全不选
          var checkedAllBox = document.getElementById("checkedAllBox");
          checkedAllBox.onclick = function(){
            if(checkedAllBox.checked){
              for(var i=0;i<items.length;i++){
                items[i].checked=true;
              }
            }else{
              for(var i=0;i<items.length;i++){
                items[i].checked=false;
              }
            }
          }
          for(var i=0;i<items.length;i++){
            
            items[i].onclick = function(){
              checkedAllBox.checked=true;
              for(var j=0;j<items.length;j++){
                if(!items[j].checked){
                  checkedAllBox.checked=false;
                  //一旦进入判断得出结果,就break
                  break;
                }
              }
            }
            
          }
         
        }
    
      </script>
    </head>
    
    <body>
      <form method="post" action="">
        你爱好的运动是?<input type="checkbox" id="checkedAllBox" />全选/全不选
        <br />
        <input type="checkbox" name="items" value="足球" />足球
        <input type="checkbox" name="items" value="篮球" />篮球
        <input type="checkbox" name="items" value="羽毛球" />羽毛球
        <input type="checkbox" name="items" value="乒乓球" />乒乓球
        <br />
        <input type="button" id="checkedAllBtn" value="全 选" />
        <input type="button" id="checkedNoBtn" value="全不选" />
        <input type="button" id="checkedRevBtn" value="反 选" />
        <input type="button" id="senBtn" value="提 交" />
      </form>
    </body>
    
    </html>
    

    图片居中
    margin:0 auto;

    文本居中
    text-align:center

  • 相关阅读:
    [文档].艾米电子 移位寄存器,Verilog
    [书籍].Pong P. Chu FPGA Prototyping By Verilog Examples
    [转载].FPGA三国志
    [笔记].电机行业常用的中英文对照
    [原创][连载].基于SOPC的简易数码相框 – Nios II SBTE部分(软件部分) 配置工作
    [转载].振南带你入门FAT32文件系统 视频
    [文档].艾米电子 在综合中使用函数,Verilog
    [转载].阿迪老师 《SD卡入门到精通》视频
    [文档].艾米电子 寄存器,Verilog
    [笔记].怎样消除pointer targets in passing argument n of 'func_xxx' differ in signedness警告
  • 原文地址:https://www.cnblogs.com/psyduck/p/14213607.html
Copyright © 2011-2022 走看看