zoukankan      html  css  js  c++  java
  • [js]DOM 篇

    • DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model)。它的作用是将网页转为一个 JavaScript 对象,从而可以用脚本进行各种操作
    • 浏览器会根据 DOM 模型,将结构化文档(比如 HTML 和 XML)解析成一系列的节点,再由这些节点组成一个树状结构(DOM Tree)。所有的节点和最终的树状结构,都有规范的对外接口

    一、节点

    • DOM 的最小组成单位叫做节点(node)。文档的树形结构(DOM 树),就是由各种不同类型的节点组成。每个节点可以看作是文档树的一片叶子
    • 浏览器提供一个原生的节点对象Node,上面这七种节点都继承了Node,因此具有一些共同的属性和方法
      • Document:整个文档树的顶层节点
      • DocumentTypedoctype标签(比如<!DOCTYPE html>
      • Element:网页的各种HTML标签(比如<body><a>等)
      • Attribute:网页元素的属性(比如class="right"
      • Text:标签之间或标签包含的文本
      • Comment:注释
      • DocumentFragment:文档的片段

    2、检测节点类型:node.nodeType  

    • 文档节点(document):9,对应常量Node.DOCUMENT_NODE
    • 元素节点(element):1,对应常量Node.ELEMENT_NODE
    • 属性节点(attr):2,对应常量Node.ATTRIBUTE_NODE
    • 文本节点(text):3,对应常量Node.TEXT_NODE
    • 文档片断节点(DocumentFragment):11,对应常量Node.DOCUMENT_FRAGMENT_NODE
    • 文档类型节点(DocumentType):10,对应常量Node.DOCUMENT_TYPE_NODE
    • 注释节点(Comment):8,对应常量Node.COMMENT_NODE

    3、node.nodeName属性返回节点的名称 

    • 文档节点(document):#document
    • 元素节点(element):大写的标签名
    • 属性节点(attr):属性的名称
    • 文本节点(text):#text
    • 文档片断节点(DocumentFragment):#document-fragment
    • 文档类型节点(DocumentType):文档的类型
    • 注释节点(Comment):#comment
    // HTML 代码如下
    // <div id="d1">hello world</div>
    var div = document.getElementById('d1');
    div.nodeName // "DIV"

    4、node.nodeValue属性返回一个字符串,表示当前节点本身的文本值,该属性可读写

      只有文本节点(text)和注释节点(comment)有文本值,因此这两类节点的nodeValue可以返回结果,其他类型的节点一律返回null。同样的,也只有这两类节点可以设置nodeValue属性的值,其他类型的节点设置无效。

    // HTML 代码如下
    // <div id="d1">hello world</div>
    var div = document.getElementById('d1');
    div.nodeValue // null
    div.firstChild.nodeValue // "hello world"

    div是元素节点,nodeValue属性返回nulldiv.firstChild是文本节点,所以可以返回文本值。

    5、Node.textContent属性返回当前节点和它的所有后代节点的文本内容。

    二、使用DOM获取元素(Element对象)

    1.通过名称类型访问节点

    (1)getElementById();

    (2)getElementsByTagName();

    2.利用父子关系查询节点

    (1).ChildNodes //获取全部子节点数组(在Firefox chrome ie9中会包含文本节点)

    (2).children //只选择标签节点的子元素

    (3).parentNode  //父节点

    (4).offsetNode  //绝对定位的父节点

    (5).hasChildnNodes()  //判断是否有子节点 返回布尔值

    (6).firstChild  //第一个子节点  (在Firefox chrome ie9中会包含文本节点)

    (7).lastChild //最后一个子节点  (在Firefox chrome ie9中会包含文本节点)

    3.利用兄弟关系访问节点

    (1).nextSibling

    (2).previousSibling

    兼容性:在Firefox、chrome等浏览器中会包含文本节点(空节点)

    (兼容处理nextSibing)

     1 function(node)
     2 {
     3     var tempLast=node.parentNode.lastChild;
     4     if(node==tempLast)
     5         return null;
     6     var tempObj=node.nextbiSing;
     7     while(tempObj.nodeType !=1 && tempObj!=tempLast)
     8         tempObj=tempObj.nextSibling;
     9     return (tempObj.nodeType==1)?tempObj;null; 
    10 }

    三、获取节点属性

    (1)gitAttribute(属性名);  //获取属性值

    (2)setAttribute(属性名,属性值);  //设置属性值

    (3)removeAttribute(属性名);  //删除属性值

    四、创建和添加节点

    1、创建节点

    (1)createElement("标签名");

    (2)createTextNode("文本内容");

    (3)createDocumentTragment();

    2、添加节点

    appendChild(nodename);  //添加子节点//默认插入到末尾//动作删除创建位置,插入到新位置

    3、删除节点

    removeChild(nodename);  //找的父元素删除。。。。 x.parentNode.removeChild(x); 

    4、替换节点

    replaceChild(newNode,oldNode);  //查找父元素替换。。。 x.parentNode.replaceChild(oNewP,oOldP); 

    5、在特定节点前插入

    insertBefore(newNode,targetNode);  

    6、在特定节点后插入

    1 function insertAfter(newElement,targetElement)
    2 {
    3     if(oParent.lastChild==targetElement)
    4         oParent.appendChild(newElement);
    5     else
    6         oParent.insertBefore(newElement,targetElement.nextSibling);
    7 }
  • 相关阅读:
    Swift
    UIWindow 详解及使用场景
    点击状态栏回到顶部的功能失效的解决办法
    iOS
    从经典问题来看 Copy 方法
    从汇编层面深度剖析C++虚函数
    数值的整数次方
    求整数二进制中1的个数
    C++中的位运算总结
    嵌入在C++程序中的extern "C"
  • 原文地址:https://www.cnblogs.com/pangys/p/5585199.html
Copyright © 2011-2022 走看看