zoukankan      html  css  js  c++  java
  • 了解Dom

    DOM

    DOM 是英文Document Object Model的缩写,即文档对象模型。它是一种跨平台的、独立于编程语言的API,它把HTML、XHTML或XML文档当作一个树结构,而每个节点视为一个对象,这些对象可以被编程语言操作,进而改变文档的结构,映射到文档的显示。

    简单来说,DOM就是我们为了方便编程语言对HTML等文档进行操作,所以啊,把HTML文档中的节点全部视为一个个的对象,然后这些对象依照层级关系形成一棵树,这棵树就命名为DOM树。有了对象,编程就方便多了,只要一层层拿到对象就可以优雅地改变对象的属性进而动态地改变HTML等文档的展示。

    DOM节点

    根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:

    • 整个文档是一个文档节点
    • 每个 HTML 元素是元素节点
    • HTML 元素内的文本是文本节点
    • 每个 HTML 属性是属性节点
    • 注释是注释节点

    HTML DOM 节点树

    HTML文本会被解析为DOM树, 树中的所有节点均可通过 JavaScript 进行访问。所有 HTML 元素(节点)均可被修改,也可以创建或删除节点。

    ct_htmltree

    节点的关系

    父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹):

    • 在节点树中,顶端节点被称为根(root)
    • 每个节点都有父节点、除了根(它没有父节点)
    • 一个节点可拥有任意数量的子
    • 同胞是拥有相同父节点的节点

    dom_navigate

    DOM API

    (1)创建元素

    var el2 = document.createElement('input');
    var node = document.createTextNode('hello world!');
    

    (2)查找元素

    // 返回当前文档中第一个类名为 "myclass" 的元素
    var el = document.querySelector(".myclass");
    
    // 返回一个文档中所有的class为"note"或者 "alert"的div元素
    var els = document.querySelectorAll("div.note, div.alert");
    
    // 获取元素
    var el = document.getElementById('xxx');
    var els = document.getElementsByClassName('highlight');
    var els = document.getElementsByTagName('td');
    
    // 获取父元素、父节点
    var parent = ele.parentElement;
    var parent = ele.parentNode;
    
    // 获取子节点,子节点可以是任何一种节点,可以通过nodeType来判断
    var nodes = ele.children;    
    
    // 查询子元素
    var els = ele.getElementsByTagName('td');
    var els = ele.getElementsByClassName('highlight');
    
    // 当前元素的第一个/最后一个子元素节点
    var el = ele.firstElementChild;
    var el = ele.lastElementChild;
    
    // 下一个/上一个兄弟元素节点
    var el = ele.nextElementSibling;
    var el = ele.previousElementSibling;
    

    (3)更改元素

    // 添加、删除子元素
    ele.appendChild(el);
    ele.removeChild(el);
    
    // 替换子元素
    ele.replaceChild(el1, el2);
    
    // 插入子元素
    parentElement.insertBefore(newElement, referenceElement);
    

    (4)操作属性

    // 获取一个{name, value}的数组
    var attrs = el.attributes;
    
    // 获取、设置属性
    var c = el.getAttribute('class');
    el.setAttribute('class', 'highlight');
    
    // 判断、移除属性
    el.hasAttribute('class');
    el.removeAttribute('class');
    
    // 是否有属性设置
    el.hasAttributes();     
  • 相关阅读:
    Codeforces 1230E
    扫描线求面积和周长 (模板,线段树)
    POJ2528
    线段树 (模板)
    Codeforces 1332B
    Codeforces 1279D
    Codeforces 1281B
    Codeforces 1288D
    8I
    8F
  • 原文地址:https://www.cnblogs.com/guangzhou11/p/7294141.html
Copyright © 2011-2022 走看看