JS之DOM操作笔记

 


DOM的概述

document object modelhtml文档加载到浏览器的内存中后,我们认为形成了一颗DOM树,即html标签按照层级结构而形成了一颗“家谱树”,而任何一个html标签、标签属性和文本都是这个树上的节点元素。

我们可以通过js的DOM组件中的方法对内存中的DOM树上的结构和内容进行修改,即通过js动态的修改内存中的那一份html及css的代码。JS之DOM操作笔记

JS的DOM操作(重点!)

一、标签元素的操作

  • 1.获取元素对象

    • 根据id获取元素 getElementByid("id值")

    • 根据标签获取多个元素

    • 根据类名获取多个元素

    • 根据name属性获取多个元素

  • 2.创建一个新元素:createElement()

  • 3.对子节点进行操作

    • hasChildNodes():判断是否有子节点

    • removeChild(子节点):删除子节点

    • replaceChild(新节点,旧节点):替换子节点

  • 4.标签体的获取与设置

    • innerHTML

    • innerText

二、属性设置

  • 1.获取属性的值:getAttribute(name)

  • 2.设置属性的值:setAttribute(name,value)

  • 3.删除某个属性:removeAttribute(name)

案例一:隔行换色的案例

  
  <script type="text/javascript">
              //1.当页面加载完毕的时候获取所有的tr
              window.onload = function(){
                  var trs = document.getElementsByTagName("tr")
                  //遍历每一个tr
                  //前面两行不设置颜色
                  for(i=2;i<trs.length;i++){
                      if(i % 2 == 0){
                          //奇数行
                          //设置该行的背景色为红色
                          trs[i].style.backgroundColor = "red"
                      }else{
                          //偶数行
                          //设置该行的背景色为绿色
                          trs[i].style.backgroundColor = "green"
                      }
                  }
                  
                  //当鼠标移动到某一行,给该行的颜色设置成灰色。当鼠标移开的时候,又恢复成原来的颜色
                  //遍历出每一行
                  var color = "white"
                  for (i=0;i<trs.length;i++) {
                      trs[i].onmouseover = function(){
                          //绑定鼠标移入事件
                          //在改变之前,先使用一个变量记住原本的颜色
                          color = this.style.backgroundColor
                          //将该行的背景色设置成灰色
                          this.style.backgroundColor = "gray"
                      }
                      
                      trs[i].onmouseout = function(){
                          //绑定鼠标移出事件
                          //将该行的颜色还原成原来的颜色
                          this.style.backgroundColor = color
                      }
                  }
              }
          </script>

案例二:全选全不选的案例

  
  <script type="text/javascript">
          //一、实现全选功能
          window.onload = function(){
              //找到所有的子选框
              var items = document.getElementsByClassName("itemSelect")
              //给全选框绑定点击事件
              //1.找到全选框
              var all = document.getElementById("checkAll")
              //2.绑定点击事件
              all.onclick = function(){
                  //点击之后,设置所有子选框的选中状态和全选框一样
                  //4.遍历出每一个子选框,并设置其选中状态
                  for(i=0;i<items.length;i++){
                      items[i].checked = this.checked
                  }
              }
              
              //二、实现反选功能
              //1.给反选按钮绑定点击事件
              var re = document.getElementById("rev")
              re.onclick = function(){
                  //2.点击的时候,要实现反选----->设置所有子选框的选中状态和原本的相反
                  /*for(i=0;i<items.length;i++){
                      //遍历出每一个子选框
                      //设置每一个子选框的选中状态为原来的相反值
                      items[i].checked = !items[i].checked
                  }*/
                  
                  //反选其实就相当于将所有的子选框再点击一遍
                  for(i=0;i<items.length;i++){
                      //遍历出每一个子选框,并且调用click()点击一下
                      items[i].click()
                  }
              }
              
              //三、实现点击子选框控制全选框的选中状态
              //1.给每一个子选框绑定点击事件
              for(i=0;i<items.length;i++){
                      //给每一个子选框绑定事件
                      items[i].onclick = function(){
                          //控制全选框的选中状态。
                          //什么时候全选框应该不选中?只要有一个子选框不选中
                          //只要当前点击的这个子选框不选中,那么全选框一定不选中
                          if(!this.checked){
                              all.checked = false
                          }else{
                              /*var count = 0
                              //当前点击的子选框为选中状态,再次遍历所有子选框,看是否每一个子选框都选中
                              for(j=0;j<items.length;j++){
                                  //有一个选中,计数器就+1
                                  if(items[i].checked){
                                      count ++
                                  }
                              }
                              //判断,计数器的大小,是否和子选框的个数相等,如果相等表示所有子选框都选中
                              if(count == items.length){
                                  //表示所有的子选框都选中了,那么就设置全选框选中
                                  all.checked = true
                              }*/
                              var count = 0;//记录未选中的标签
                              for(j=0;j<items.length;j++){
                                  //有一个选中,计数器就+1
                                  if(!items[j].checked){
                                      count ++
                                  }
                              }
                              if(count == 0){
                                  //表示所有的都选中
                                  all.checked = true
                              }
                          }
                      }
                  }
          }
      </script>

JS的内置对象(不重要)

与java一样,js也内置一些现成的对象供我们使用,js中内置对象有如下几个:

Array对象

Array对象是数组对象,跟java中的数组一个意思,但是使用语法上稍微有些区别。

  • 1.创建数组对象

    • 创建一个空数组:var arr = new Array();

    • 创建一个指定大小的数组:var arr = new Array(size);

    • 创建数组并填充元素:var arr = new Array(element0, element1, ..., elementn);

    • 直接创建元素数组:var arr = [element0, element1, ..., elementn];

  • 2.数组中的元素获取

    • 跟java一样通过索引的方式获得数组中的元素:获得数组中的一个元素:arr[0]

        
        遍历获得数组中的所有元素:
        for(var i=0;i<arr.length;i++){
        alert(arr[i]);
        }
  • 多维数组的操作

    • js中的数组跟java中的集合相似,也就是数组中的元素还是数组

      arr = [

        
        [1,2,3],
        [4,5,6],
        [7,8,9]
              ]

      获取数组中的8数字可以:

        
        arr[2][1]

String对象(比较重要)

  • 获取指定位置的字符:charAt()

  • 查找某个字符的第一次出现的下标:indexOf()

  • 查找某个字符最后一次出现的下标:lastIndexOf

  • 切割字符串:split()

  • 截取字符:substring(i,j)

  • substr(i,j),表示从i下标开始,截取j个字符

日期对象(比较重要)

  • 创建方式

    • 创建当前日期时间:var date = new Date();

    • 创建指定日期时间:var date = new Date(毫秒值);其中毫秒值为1970-01-01至今的时间毫秒值

  • 时间的获取

    • 获得年:getFullYear() 从 Date 对象以四位数字返回年份。

    • 获得月:getMonth() 从 Date 对象返回月份 (0 ~ 11)。

    • 获得星期:getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。

    • 获得日:getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。

      • 获得毫秒值:getTime() 返回 1970 年 1 月 1 日至今的毫秒数。

Math对象

Math对象是数学对象,是一个工具对象,因此Math对象不用使用new的方式创建,直接使用Math就可以调用对象内部的方法。

  • abs(x) 返回数的绝对值。

  • ceil(x) 对数进行上舍入。

  • floor(x) 对数进行下舍入。

  • random() 返回 0 ~ 1 之间的随机数。

  • round(x) 把数四舍五入为最接近的整数。

案例三:省市二级联动

  
  <script type="text/javascript">
              // 定义二维数组:准备数据
              var items = [["长沙市","岳阳市","衡阳市","邵阳市"],["广州市","深圳市","东莞市","惠州市"],["武汉市","黄冈市","荆州市","襄阳市"],["昆明市","大理市","玉溪市","丽江市"]]
              //当页面加载完毕之后,给省份的下拉选择框绑定一个onchange事件
              window.onload = function(){
                  //1.获取省份的下拉选择框
                  var pro = document.getElementById("provinceId")
                  //找到城市的下拉选择框
                  var ct = document.getElementById("cityId")
                  //2.绑定onchange事件
                  pro.onchange = function(){
                      
                      //每次改变之前,要将之前的城市下拉选择框中的内容清空
                      ct.innerHTML = "<option value=''>----请-选-择-市----</option>"
                      //3.绑定之后,获取当前显示的是哪个option--->其实就是要获取当前显示的option的value
                      //我们可以通过这个value,到二维数组中取出该省份对应的城市数组
                      var cities = items[this.value]
                      
                      for (i=0;i<cities.length;i++) {
                          //4.每遍历出来一个城市创建一个option标签
                          //<option value='i'>当前遍历出来的城市名</option>
                          var opt = document.createElement("option")
                          //设置这个标签的value属性
                          opt.setAttribute("value",i)
                          //设置这个标签的文本
                          opt.innerText = cities[i]
                          
                          ct.appendChild(opt)
                      }
                  }
              }
              
              
          </script>