• 文档对象模型(Document Object Model,简称DOM)


    文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。

    1、获取节点

    1、节点

    <!DOCTYPE html>
    <html lang="en"><head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head><body>
        <p>111111</p>
        <ul id="ul1">
            <li>11111</li>
            <li>22222</li>
            <li>33333</li>
            <li>44444</li>
        </ul>
    </body></html>
    节点树(家谱)

     

    2、获取子节点

    • 元素.childNodes 在标准浏览器下,返回的可能有文本节点,在IE8及以下,只返回元素节点

    • 元素.children 只返回元素节点(推荐)

    <ul id="list">
        <li>1111</li>
        <li>2222</li>
        <li>3333</li>
        <li>4444</li>
    </ul>
    var ul = document.getElementById('list');
    // var li = ul.childNodes;
    var li = ul.children;
    console.log(li);
     

    3、节点的基本属性

    节点基本属性有nodeType(节点类型), nodeName(节点名), nodeValue(节点内容)

    var p = document.querySelector('p');
    var ul = document.querySelector('ul');
    var li = ul.childNodes;
    ​
    // 元素.nodeType  元素节点1   属性节点2   文本节点3    文档节点9
    console.log(p.nodeType); // 1 元素节点
    for (var i = 0; i < li.length; i++) {
        console.log(li[i].nodeType);
    }
    ​
    // ----------------------------
    // 元素.nodeName   元素节点,返回大写的标签名   文本节点,返回#text
    console.log(p.nodeName); // P
    console.log(ul.nodeName); // UL
    for (var i = 0; i < li.length; i++) {
        console.log(li[i].nodeName);
    }
    ​
    // ----------------------------------
    // 元素.nodeValue
    // 只有文本节点才有nodeValue
    console.log(p.nodeValue); // null
    console.log(p.childNodes[0].nodeValue); // 111111
     

    4、获取父节点

    • 元素.parentNode 父节点(没有兼容性问题)

    • 元素.offsetParent 返回离它最近的有定位属性的父级,如果没有定位的父级,则返回body

    <div id="box1">
        <div id="box2">
            <div id="box3"></div>
        </div>
    </div>
    var box3 = document.getElementById('box3');
    console.log(box3.parentNode);
    ​
    console.log(box3.offsetParent);
     

    5、其它节点

    <ul>
        <li>11111</li>
        <li>22222</li>
        <li>33333</li>
        <li>44444</li>
    </ul>
    var ul = document.getElementsByTagName('ul')[0];
    ​
    // 通过父级,获取第一个子节点
    // 父级.firstChild            在标准浏览器下,有可能返回的是一个文本节点,在IE8及以下,返回的是一个元素节点
    // 父级.firstElementChild     在标准浏览器下,返回的是第一个元素节点,在IE8及以下返回undefined
    // console.log(ul.firstChild);
    // console.log(ul.firstElementChild);
    var first = ul.firstElementChild || ul.firstChild;
    first.style.background = 'red';
    ​
    // --------------------------------
    // 通过父级,获取最后一个子元素
    // 父级.lastChild
    // 父级.lastElementChild
    var last = ul.lastElementChild || ul.lastChild;
    last.style.background = 'green';
    ​
    // ----------------------------------
    // 获取元素的下一个兄弟节点
    // 元素.nextSibling
    // 元素.nextElementSibling
    var next = first.nextElementSibling || first.nextSibling;
    next.style.background = 'yellow';
    ​
    // 某个元素的上一个兄弟节点
    // 元素.previousSibling
    // 元素.previousElementSibling
    var prev = last.previousElementSibling || last.previousSibling;
    prev.style.background = 'pink';
     

    6、属性操作

    attribute可以操作自定义的属性(在标签上可见),也可以操作原生的属性

    <p id="txt" title="我就是我,不一样的烟火" abc="小邓子">王老二</p>
    var txt = document.getElementById('txt');
    ​
    // 点的方式
    console.log(txt.title);
    txt.title = '帅哥们举个手';
    ​
    // 中括号   
    console.log(txt['title']);
    txt['title'] = '美女们举个手';
    // 比点的形式强大,还可以接收变量
    var t = 'title';
    console.log(txt[t]);
    txt[t] = '再次升华';
    ​
    // -------------------------------
    // 点和中括号的形式,只能操作原生的属性,不能操作自定义的属性
    console.log(txt.abc); // undefined
    // -----------------------------
    // attribute可以操作自定义的属性(在标签上可见),也可以操作原生的属性
    // 设置:元素.setAttribute(属性名, 值);
    // 获取:元素.getAttribute(属性名);
    // 删除:元素.removeAttribute(属性名);
    console.log(txt.getAttribute('abc'));
    txt.setAttribute('abc', '俊男靓女');
    txt.removeAttribute('abc');

    2、操作节点

    1、创建节点

    • 创建标签节点:document.createElement(标签名);

    • 创建文本节点:document.createTextNode(文本);

    2、添加节点

    • 添加节点:父级.appendChild(子级); 将子级添加到父级的最后

      var div = document.createElement('div'); // 创建div
      // var txt = document.createTextNode('我就是我'); // 创建文本
      // div.appendChild(txt); // 文本添加到div中
      // body.appendChild(div); // div添加到body中
      ​
      ​
      var div = document.createElement('div'); // 创建div
      div.innerHTML = '我是新来的';
      body.appendChild(div); // div添加到body中
       

      案例:留言

    3、插入节点

    • 插入节点:父元素.insertBefore(要插入的节点, 参考的节点)

    <ul>
        <li>吃饭</li>
        <li class="ab">睡觉</li>
        <li>打豆豆</li>
    </ul>
    var ab = document.querySelector('.ab');
    ​
    var li = document.createElement('li');
    li.innerHTML = '刷牙';
    ​
    ab.parentNode.insertBefore(li, ab);
     

    4、删除节点

    • 删除节点:父级.removeChild(被删除的元素);

    <ul>
        <li>吃饭</li>
        <li>睡觉</li>
        <li>打豆豆</li>
    </ul>
    var ul = document.getElementsByTagName('ul')[0];
    var li = document.getElementsByTagName('li');
    ​
    for (var i = 0; i < li.length; i++) {
        li[i].onclick = function () {
            ul.removeChild(this); // 删除
        }
    }
     

    5、替换节点

    • 替换节点:父元素.replaceChild(新的节点, 被替换的节点);

      <p>小邓</p>
      <button>替换</button>
      <div>老王</div>
      var p = document.querySelector('p');
      var button = document.querySelector('button');
      var div = document.querySelector('div');
      ​
      button.onclick = function () {
          document.body.replaceChild(p, div);
      }
       

    6、复制节点(克隆)

    • 复制节点:被复制的节点.cloneNode(是否克隆子孙节点);

      <button>复制</button>
      <ul>
          <li>吃饭</li>
          <li>睡觉</li>
          <li>打豆豆</li>
      </ul>
      window.onload = function () {
          var btn = document.querySelector('button');
          var ul = document.querySelector('ul');
      ​
          btn.onclick = function () {
              var o = ul.cloneNode(true);
              document.body.appendChild(o);
          }
      }

    3、表格操作

    DOM提供了可以简便快速获取表格元素的属性,先获取到表格table对象(oTab),再通过table获取里面的元素,再通过 table 获取里面的元素

    比如获取到了表格table为oTab:

    thead-----oTab.tHead 一个

    tfoot------oTab.tFoot 一个

    Tbody----oTab.tBodies 一堆

    tr----------oTab.rows 一堆

    td----------oTab.tr.cells 一堆(必须通过tr来获取)

    var box = document.getElementById('box');
    ​
    var head = box.tHead; // 获取表格头 只有一个
    head.style.backgroundColor = 'pink';
    ​
    var foot = box.tFoot; // 获取表格尾 只有一个
    foot.style.backgroundColor = 'green';
    ​
    var body = box.tBodies; // 获取表格体 多个(一个组)
    // console.log(body);
    body[0].style.backgroundColor = '#ccc';
    ​
    var tr = body[0].rows; // 获取表格行 多个(一个组)
    // console.log(tr);
    tr[0].style.backgroundColor = '#333';
    ​
    var td = tr[0].cells; // 获取某一行下的单元格  多个(一个组)
    // console.log(td);
    td[1].style.backgroundColor = 'red';
     



  • 相关阅读:
    alpha冲刺9
    alpha冲刺8
    alpha冲刺7
    alpha冲刺6
    团队作业——随堂小测(同学录)
    alpha冲刺5
    【麻瓜制造者】团队项目测试报告与用户反馈
    Android基础学习
    学习博客之工具的学习、安装和使用
    学习博客之Java继承多态接口
  • 原文地址:https://www.cnblogs.com/cyf666cool/p/13663124.html
Copyright © 2020-2023  润新知