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

原文地址:https://www.cnblogs.com/psyduck/p/14213607.html