2

DOM树结构

绘制DOM树

<!doctype html>
<html>
  <head>
    <title>测试</title>
  </head>
  <body>
    <!-- 测试 -->
    <div>
      hello, I'm come from Mars. <span style="color: #333;" name="itcast" itcast="HAHAHA">by--郑少女</span>哈哈
    </div>
  </body>
</html>

需要注意的点

  1. html节点很特殊,html和head标签之间的text不属于html的子节点。
  2. 如果紧跟div标签后面的不是上面👆代码块中写的文本内容,而是标签,那么div和标签中间将有一个text子节点。
  3. “哈哈”和"</div>"之间就算有一个回车符,但是也只能算是一个text子节点。但是,如果把“哈哈”替换成“
    ”那么“
    ”和“</div>”之间有一个text子节点

任何一个DOM树结构

1、绘制DOM树:childNodes、attributes
2、从一个中心元素访问其所有的直系亲属元素
  * 访问父元素: parentNode
  * 访问上一个兄弟元素:previousSibling
  * 访问下一个兄弟元素:nextSibling
  * 访问第一个属性元素:attributes[1]
  * 访问最后一个属性元素:lastChild 或 childNodes[childNodes.length-1]
  1. 所谓的DOM操作,操作的是什么
    答:操作的是DOM树,实现增删改查
  2. 一般DOM树结构
父节点
  兄弟节点
  当前节点
    属性节点
    子节点
  兄弟节点

查询,即获取元素

  1. 标准DOM API

    • document.getElementById
    • document.getElementsByTagName
    • document.getElementsByName
    • document.getElemensByClassName
    • document.querySelectorAll 功能强大,但是也许会有浏览器不兼容的情况存在
  2. 亲属访问
  3. 属性获取

    • getAttribute
    • getAttributeNode

增加,先增加后加入

  1. 创建

    • document.createElement 创建元素
    • document.createTesxtNode 创建文本节点
    • document.createAttribute 属性节点
    • innerHTML
    • innerText
    • node.cloneNode()
  2. 加入

    • appendChild 追加到结尾处
    • innerHTML
    • insertBefore 用法:将元素插入到某一个元素的前面 父元素.insertBefore(新元素, 旧元素);
  3. 其他

    • style 的操作
    • setAttribute(属性名, 属性值)

删除

  1. 删除元素

    • removeChild 用法:父元素.removeChild()
    • removeAttributeNode

修改

  1. 修改节点

    • 删除节点再加入
  2. 修改样式

    • style.xxx = vvv;
    • setAttribute
  3. 修改文本

    • innerHTML
    • innerText
    • 节点操作
    • nodeValue
  4. 修改属性

    • .xxx = vvv
    • setAttribute

操作属性的实例展示

  1. 增加属性节点
<script>
    onload = function(){
        var div = document.getAttributeNode('#dv')[0];

        // 第一种方式 添加自定义的属性,非标准模式
        div.setAttribute('newAttr', '新增的属性');
        
        // 第二种方法 .xxx = vvv
        div.className = 'newClass';
        
        // 第三种方法 使用更安全,在前两个方法使用失效的情况下可用
        var attr = document.createAttribute('newAttr2');
        attr.nodeValue = '第三种增加属性的方式';
        div.setAttribute( attr );
    }
</script>
<body>
    <div id="dv"></div>
</body>
  1. 删除属性节点
<script>
    onload = function(){
        var ck = document.getAttribute('#ck')[0];
        
        // 第一种删除的方法
        ck.removeAttribute('checked');
        
        // 第二种删除方法--对象的方式删除
        var attr2 = ck.getAttributeNode('checked');
        ck.removeAttributeNode( attr2 );
        
        // 第三种删除方法
        ck.chceck = false;
    }
</script>
<body>
    <input checked="checked" id="ck" />
</body>

Nanana
129 声望4 粉丝