一些常见的DOM操作

Javascript DOM 总结

浏览器使用与该形状对应的数据结构来表示文档。每个盒子都是一个对象,我们可以和这些对象交互,找出其中包含的盒子与文本。我们将这种表示方式成为文档对象模型,或简称DOM。

  1. DOM的根节点是 document.documentElement

  2. 获取节点:

    document.getElementById (通过元素的 id 值来获取节点)
    document.getElementsByClassName (通过元素的 class 值来获取节点,返回的是一个类似于数组的对象,数组里面的每个元素的class值相同)
    document.getElementsByTagName (通过元素的 标签 来获取节点,返回的是一个类似于数组的对象,数组里面的每个元素的标签相同 )

  3. 创建节点:

    document.createElement("p") (创建元素节点,例子中是创建一个段落)
    document.createTextNode("...") (创建文本节点)

  4. (基本)节点属性:

    NODE.nodeType(返回节点的类型):1 代表元素节点; 2 代表属性节点; 3 代表文本节点;8 代表注释 (PS:NODE指的是任意节点)
    NODE.nodeName (返回节点名称)
    NODE.nodeValue (返回节点的值)

  5. (层次)节点属性:

    NODE.parentNode (获取当前节点的父节点)
    NODE.childNodes (获取当前节点的子节点)
    NODE.firstChild (获取当前节点的第一个子节点)
    NODE.lastChild (获取当前节点的最后一个子节点)
    NODE.previousSibing (获取当前节点的前一个兄弟节点,如果无则为null)
    NODE.nextSibing (获取当前节点的后一个兄弟节点,如果无则为null )

  6. 修改节点的操作(PS:下面的NODE代表父节点):

    NODE.removeChild (移除特定节点)
    NODE.appendChild (添加子节点,并将其放置在孩子节点列表末尾)
    NODE.insertBefore (将第一个参数表示的节点插入到第二个参数表示的节点前面。例子:NODE.insertBefore(A, B); //把节点A插到节点B的前面)
    NODE.replaceChild (将一个子节点替换为另一个子节点。例子:NODE.replaceChild(A, B); //用节点A 来代替节点B)
    (insertBefore和replaceChild都把新节点作为第一个参数)

  7. 获取(设置)元素的属性:

    (这里说明一下:【元素的属性】和【元素节点属性】是不同的,前者的“元素”指的是HTML中的元素,后者是指DOM中的元素节点。)
    我们可以通过元素的DOM对象的同名属性去访问元素的某些属性,比如链接的href属性。
    (PS:下面的NODE指的是元素节点)
    NODE.getAttribute("align") (获取align属性的内容)
    NODE.setAttribute("align", "center") (设置【或创建】align属性为center)(可以用该语句来创建自定义属性)
    NODE.removeAttribute("align") (删除align属性)

  8. 布局:

    块元素 (Block,会换行)
    内联元素 (Inline)
    元素的尺寸与位置 属性:
    var NODE = document.getElementsByTagName("p")[0];
    NODE.offSetWidth (元素的起始位置 宽 单位:像素)
    NODE. offSetHeight (元素的起始位置 高 单位:像素)
    NODE. clientWidth (元素内部占据的空间尺寸 宽 忽略边界宽度)
    NODE. clientHeight (元素内部占据的空间尺寸 高 忽略边界宽度)
    window. pageXOffset (当前页面相对于窗口显示区左上角的X位置)
    window. pageYOffset (当前页面相对于窗口显示区左上角的Y位置)
    PS: 更详细请看这里

  9. 查询选择器:

    document.querySeletorAll("..."); // 该方法接受一个选择器字符串并返回类似与数组对象,返回的对象中包含所有匹配的元素
    document.querySeletor("..."); // 该方法至返回第一个匹配元素,如果不在则返回null

  10. 获取(控制)元素的类

    element.classList.length (返回类列表中类的数量)
    element.classList.add(class1, class2, ...) (在元素中添加一个或多个类名。如果指定的类名已存在,则不会添加。)
    element.classList.contains(class) (返回布尔值,判断指定的类名是否存在。)
    element.classList.item(index) (返回类名在元素中的索引值。索引值从 0 开始。如果索引值在区间范围外则返回 null。)
    element.classList.remove(class1, class2, ...) (移除元素中一个或多个类名。若移除不存在的类名,不会报错。)
    element.classList.toggle(class, true|false) (在元素中切换类名。第一个参数为要在元素中移除的类名,并返回 false。 如果该类名不存在则会在元素中添加类名,并返回 true。第二个是可选参数,是个布尔值用于设置元素是否强制添加或移除类,不管该类名是否存在。)

    toggle的例子:
    移除一个 class: element.classList.toggle("classToRemove", false);
    添加一个 class: element.classList.toggle("classToAdd", true);

  11. 获取(控制)元素的样式

    element.style.样式属性名 (获取元素的样式)
    element.style.样式属性名 = '属性值' (设置元素的样式)
    (由于 style 属性的优先级和通过style设置内联样式是一样的,并且在css层级样式中拥有最高优先级,因此在为特定的元素设置样式时很有用。)