• DOM文档对象模型


    说明

    本文档内容摘自W3School中DOM教程 https://www.w3school.com.cn/htmldom/index.asp。
    如果已经了解DOM的含义,开发中可以直接查看以下关于DOM对象方法、属性的说明文档:
    对象说明:https://www.w3school.com.cn/jsref/index.asp
    使用示例:https://www.w3school.com.cn/example/hdom_examples.asp

    1、DOM

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。我们最为关心的是,DOM把网页和脚本以及其他的编程语言联系了起来。

    2、W3C DOM 标准被分为 3 个不同的部分:

    核心 DOM - 针对任何结构化文档的标准模型
    XML DOM - 针对 XML 文档的标准模型,定义了所有 XML 元素的对象和属性,以及访问它们的方法。
    HTML DOM - 针对 HTML 文档的标准模型,定义了所有 HTML 元素的对象和属性,以及访问它们的方法,是关于如何获取、修改、添加或删除 HTML 元素的标准。

    3、HTML DOM

    web开发中的DOM通常是指 HTML DOM,在 HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML。HTML 文档中的所有内容都是节点:

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

    浏览器在加载html页面的时候会创建一个DOM模型,树根是window或document对象。在这个树形结构中,html中的每个元素都可以被定位到,从而脚本开发人员可以通过DOM的属性、方法和事件来掌控、操纵和创建动态的网页元素。例如,通过方法够执行的增加、删除元素,通过属性获取节点的名称、某个属性的值。我们用JavaScript对网页进行的所有操作都是通过DOM进行的。DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容,所以如果你下载一个JavaScript语言的参考帮助文档来查的话,就连妇孺皆知的document.write方法也找不到。

    DOM的根节点

    • document.documentElement,全部文档,不含html标签
    • document.body,文档的主体

    4、DOM支持的操作

    • 访问节点
    • 修改HTML内容,innerHTML
    • 改变CSS样式,node.style.** = ...
    • 改变HTML属性
    • 创建新的HTML元素
    • 删除已有的HTML元素
    • 改变事件,与html对象的事件配合,如onclik、onload、onunload、onmouseover、onmouseout、onchange等等

    5、常用的DOM方法

    获取DOM元素

    * getElementById(id)获取带有指定ID的节点
    * getElementsByTagName(tagname) ,获取指定tagname的节点列表
    * getElementsByClassName(classname) ,获取指定classname的节点列表
    * querySelector(cssselector),通过css选择器查找元素,返回符合css选择器的第一个子元素
    * querySelectorAll(cssselector),返回符合css选择器的所有元素
    

    节点比较

    * isEqualNode(node1),判断与node1是否相等
    
    如果满足下列条件两个节点就相等并返回true:
    1)有相同节点类型
    2)相同的节点名,节点值,本地名,命名空间URI和前缀。
    3)他们与所有的后代都有相同的子节点
    4)有相同的属性和属性值(属性没有相同的排序方式)
    
    * isSameNode(node1),判读与node1是否为同一个节点,相等的节点不一定是相同的节点,有的浏览器已经不支持该方法,可以使用===来比较
    

    parent、child节点

    * hasChildNodes(),是否有子元素,含注释节点、文本节点
    * appendChild(node) ,在节点最后插入新的node节点
    * removeChild(node) ,在节点中删除node节点
    * replaceChild(node1,node2) ,把node1替换node2节点,调用节点为node1、node2的父节点
    * insertBefore(node1,node2) ,在node2前插入node1节点,调用节点为node1、node2的父节点
    * previousSibling(),返回元素的紧接之前的兄弟元素,含文本节点、注释节点
    * previousElementSibling(),只返回元素节点之前的兄弟元素节点(不包括文本节点、注释节点)
    * nextSibling(),返回元素的紧接之后的兄弟元素,含文本节点、注释节点
    * nextElementSibling(),只返回元素节点之后的兄弟元素节点(不包括文本节点、注释节点)
    

    创建节点

    * createAttribute() ,创建属性节点
    * createElement() ,创建元素节点,一般为tag标签
    * createTextNode() ,创建文本节点,一般会追加到元素节点中使用
    

    属性操作

    * hasAttributes(),没有参数,判断是否有属性,有返回true否则返回false
    * hasAttribute(name),判断是否具有某个属性
    * getAttribute(name) ,通过属性名获取指定的属性值,没有该属性则返回null
    * getAttributeNode(name),返回属性节点,name=value的样子
    * setAttribute(name,value) ,设置或修改指定属性的值
    * setAttributeNode(atr),设置或者改变指定属性节点,atr需要通过createAttribute创建
    * removeAttribute(name),删除指定属性
    * removeAttributeNode(atr),删除属性节点并返回移除后的节点,atr需要通过createAttribute创建
    

    焦点相关

    * focus(),设置文档或元素获取焦点
    * hasFocus(),返回布尔值,检测是否获取了焦点
    * blur(),移除焦点
    

    事件相关

    * addEventListener(event,function),添加事件句柄,event:事件,function:事件触发时要执行的函数,可以添加多个不同类型的事件,或者同一个event关联多个function。
    * removeEventListener(event,function),移除addEventListener()方法添加的事件句柄
    

    思考:能否在不引用父元素的情况下删除某个元素?
    不能。DOM 需要了解您需要删除的元素,以及它的父元素。一个常用的解决方法:找到您需要删除的子元素,然后使用 parentNode 属性来查找其父元素,例如:
    var child=document.getElementById("p1");
    child.parentNode.removeChild(child);

    6、常用的DOM属性

    * innerHTML ,节点的文本值,对于获取或替换 HTML 元素的内容很有用
    * parentNode ,父节点
    * childNodes ,子节点,属性返回所有的节点,包括文本节点、注释节点;
    * children,返回元素的子元素的集合,只返回元素节点;
    * firstChild,第一个子节点,含文本节点、注释节点
    * lastChild,最后一个子节点,含文本节点、注释节点
    * nodeType ,节点类型
    * attributes,元素的属性组成的数组
    * style,元素的style样式
    * innerText,内部文本
    * innerHTML,设置或返回内部html
    * lang,返回或设置元素的语言
    * className 返回或设置class属性
    * classList 返回元素的类名,是List
    * offsetHeight,返回元素的高度,包含边框、padding
    * offsetWidth,返回元素的宽度,包含边框、padding
    * offsetLeft 当前元素的相对水平偏移位置的偏移容器
    * offsetTop 当前元素的相对垂直偏移位置的偏移容器
    * offsetParent 返回元素的偏移容器
    
    • nodeType是只读的
    • 比较重要的节点类型,如下图所示:
    ![](https://img2018.cnblogs.com/blog/405122/202002/405122-20200206140947187-2061034948.png)
    
    * nodeName 节点名称,始终包含HTML标签元素的大写字母。
    
    • nodeName是只读的
    • 元素节点的nodeName与标签名相同
    • 属性节点的nodeName与属性名相同
    • 文本节点的nodeName始终是#text
    • 文档节点的nodeName始终是#document
    * nodeValue 节点的值
    
    • 元素属性的nodeValue是undefined或null
    • 文本节点的nodeValue是文本本身
    • 属性节点的nodeValue是属性值
    ####7、常用的HTML DOM对象
    **遇到相关的内容,可以查看以下链接:**
    对象说明:https://www.w3school.com.cn/jsref/index.asp 
    对象使用示例:https://www.w3school.com.cn/example/hdom_examples.asp
    * Document对象
    * Event对象
    * Form和Input对象
    * Frame、Frameset、Iframe对象
    * Image对象
    * Location对象
    * navigator对象
    * Option、Selection对象
    * Screen对象
    * Table、TableHeader、TableRow、TableData对象
    * window对象
  • 相关阅读:
    数组splice用法
    opacity 适配Ie
    直接贴页面,页面衔接处总会有一像素的间隔
    <script src='url'</script>显示问题
    弹出层
    CF789A. Anastasia and pebbles
    CF789C. Functions again
    HDU2161 Primes
    UVA11752 The Super Powers
    UVA11827 Maximum GCD
  • 原文地址:https://www.cnblogs.com/21summer/p/12268361.html
Copyright © 2020-2023  润新知