# DOM相关

DOM(Document Object Model,文档对象模型)是 HTML 和 XML 的应用程序接口(API),DOM 将把整个页面规划成由节点层级构成的文档,HTML 或 XML 页面的每个部分都是一个节点的衍生物,将这些节点封装为对象,通过这些对象对文档进行CRUD的动态操作。看下面示例:

W3C DOM 标准被分为 3 个不同的部分:

  • 核心 DOM - 针对任何结构化文档的标准模型
    • Document:文档对象
    • Element:元素对象
    • Attribute:属性对象
    • Text:文本对象
    • Comment:注释对象
    • Node:节点对象,其他5个的父对象
  • XML DOM - 针对 XML 文档的标准模型
  • HTML DOM - 针对 HTML 文档的标准模型

# 核心DOM

  • Document:文档对象

    1. 创建(获取):在html Dom模型中可以使用window对象来获取如window.document或者document。

    2. 常用方法:

      1. 获取Element对象:
        1. getElementById():根据id属性值获取元素对象。id属性值一般唯一
        2. getElementsByTagName():根据元素名称获取元素对象们。返回值是一个数组
        3. getElementsByClassName():根据Class属性值获取元素对象们。返回值是一个数组
        4. getElementsByName():根据name属性值获取元素对象们。返回值是一个数组
      2. 创建其他DOM对象:
        • createAttribute(name):创建属性
        • createComment():创建注释节点
        • createElement():创建元素,比如button,div等等
        • createTextNode():创建文本节点
      <!DOCTYPE html>
      <html lang="en">
      
      <head>
          <meta charset="UTF-8">
          <title></title>
      
      </head>
      
      <body>
          <div id="div1">div1</div>
          <div id="div2">div2</div>
      
          <div id="div3">div3</div>
      
          <div class="cls1">div4</div>
          <div class="cls1">div5</div>
      
          <input type="text" name="username" placeholder="test">
          <div id="selfElement"></div>
          <script>
              //根据元素名称获取元素对象们。返回值是一个数组
              var divs = document.getElementsByTagName("div");
              console.log(divs)
              //根据Class属性值获取元素对象们。返回值是一个数组
              var div_cls = document.getElementsByClassName("cls1");
              console.log(div_cls)
              //根据name属性值获取元素对象们。返回值是一个数组
              var ele_username = document.getElementsByName("username");
              console.log(ele_username)
      
              var table = document.createElement("table");
              console.log(table);
              var selfElement = document.getElementById("selfElement");
              selfElement.append(table);
              console.log(selfElement);
      
              var commentNode = document.createComment("this is first test");
              table.append(commentNode)
      
              var nameAttr = document.createAttribute("name");
              nameAttr.value = "xie";
              table.setAttributeNode(nameAttr)
      
              var textNode = document.createTextNode("hello world");
              table.appendChild(textNode);
      
          </script>
      </body>
      
      </html>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
  • Element:元素对象

    1. 获取/创建:通过document来获取和创建
    2. 方法:
      1. removeAttribute():删除属性
      2. setAttribute():设置属性
  • Node:节点对象,其他5个的父对象,注意所有dom对象都可以被认为是一个节点

    • 常用方法:
      • appendChild():向节点的子节点列表的结尾添加新的子节点。
      • removeChild():删除(并返回)当前节点的指定子节点。
      • replaceChild():用新节点替换一个子节点。
    • 常用属性:parentNode 返回节点的父节点。

# HTMLDOM

  1. 标签体的设置和获取:innerHTML
  2. 控制元素样式
    1. 使用元素的style属性来设置,比如: //修改样式方式1 div1.style.border = "1px solid red"; div1.style.width = "200px"; //font-size--> fontSize div1.style.fontSize = "20px";
    2. 提前定义好类选择器的样式,通过元素的className属性来设置其class属性值。

# 事件监听机制

事件是某些组件被执行了某些操作后,触发某些代码的执行。有几个常用概念:

  • 事件:某些操作。如: 单击,双击,键盘按下了,鼠标移动了
  • 事件源:组件。如: 按钮 文本输入框...
  • 监听器:代码。
  • 注册监听:将事件,事件源,监听器结合在一起。 当事件源上发生了某个事件,则触发执行某个监听器代码。

# 常见的事件

  1. 点击事件:
    1. onclick:单击事件。
    2. ondblclick:双击事件。
  2. 焦点事件
    1. onblur:失去焦点。
    2. onfocus:元素获得焦点。
  3. 加载事件:
    1. onload:一张页面或一幅图像完成加载。
  4. 鼠标事件:
    1. onmousedown:鼠标按钮被按下。
    2. onmouseup:鼠标按键被松开。
    3. onmousemove:鼠标被移动。
    4. onmouseover:鼠标移到某元素之上。
    5. onmouseout:鼠标从某元素移开。
  5. 键盘事件:
    1. onkeydown:某个键盘按键被按下。
    2. onkeyup:某个键盘按键被松开。
    3. onkeypress:某个键盘按键被按下并松开。
  6. 选择和改变
    1. onchange:域的内容被改变。
    2. onselect:文本被选中。
  7. 表单事件:
    1. onsubmit:确认按钮被点击。
    2. onreset:重置按钮被点击。

# 表单提交

注意上面的表单提交验证通过onsubmit事件实现,如果是下面这样是完不成表单验证的:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title></title>

</head>

<body>
    <form action="#" id="form" onclick="checkForm();">
        <input name="username" id="username">

        <select id="city">
            <option>--请选择--</option>
            <option>北京</option>
            <option>上海</option>
            <option>广州</option>
        </select>
        <input type="submit" value="提交">
    </form>


    <script>
        function checkForm() {
            return false;
        }
    </script>



</body>

</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

上面的onclick方法相当于:

function fun() {
   checkForm();
}
1
2
3

如果想完成表单验证,需要改成

<form action="#" id="form" onclick="return checkForm();">
</form>
1
2

# 获取鼠标位置

下面是一个获取鼠标位置的例子:

# 案例

# 动态表格

做一个动态的表格,有添加删除以及选择等功能:

# 表单验证