javascript高级程序设计学习笔记(四)---DOM(1)

DOM

DOM基本

节点

DOM也就是Document Object Model,讲任何HTML描绘成一个由多个节点构成的树形结构。其中文档节点为根节点,其只有一个子节点,即元素,为文档元素(每个文档只有一个)。HTML转换DOM树:

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>My title</title>
  </head>
  <body>
    <a href="">My Link</a>
    <h1>My header</h1>
  </body>
</html>

在这里插入图片描述

  • Node类型

    Node类型

    JavaScript所有节点类型都继承自Node类型,每个节点都有一个nodeType属性,用来表明节点类型
    nodeName保存元素标签名
    

    获取节点
    每个节点都有个childNodes属性,保存一个列表对象NodeList,并且由length属性,但不是Array实例。通过该对象,可以反映DOM变化。可以通过childNodes[]获取该节点的所有子节点,并且在同一个childNodes列表中具有相同父节点parentNode。该列表中的兄弟节点可以用previousSibling和nextSibling属性访问前一个或者后一个兄弟节点

    兄弟关系:element.previousElementSibling / element.nextElementSibling
    在这里插入图片描述

    操作节点

    • appendChild
      向childNodes列表末尾添加一个节点

    • insertBefore()
      接受要插入的节点和参照节点,并且把要插入节点插入到参照节点前面

    • replaceChild()

    • 接受要插入的节点和要替换的节点

    • removeChild() 接受要移除的节点

  • Document类型

     通过Document类型表示文档,document对象是HTMLDocument对象一个实例,也是window对象一个属性
    

    文档的子节点
    可能是DocumentType、Element、ProcessingInstruction或Comment
    通过documentElement属性,指向元素
    通过childNodes访问文档元素
    body属性指向元素

文档信息

- tittle  属性包含< title >的文本 	 
 -  url     属性包含完整的URL 	 
 -  domain  属性只包含域名 	 
- referrer  属性保存链接到当前页面的那个页面的url 

查找元素

- getElementById()   
 		接受元素的ID,返回相应的第一个出现的元素或null
-   getElementByTagName()
   		接受标签名,返回一个HTMLCollection对象
- getElementByName()  
 	 返回带有给定name特性的所有元素
  • Element类型

    HTML元素,由HTMLElement类型表示,继承Element
    特性有id,title、className、lang

获取特性

 - getAttribute(),   
 	传入要获取的特性名,IE可以获取自定义的特性。  
   利用该方法访问style,返回CSS文本,而用属性访问,返回的是对象  
   利用该方法访问onclick,返回字符串,而已属性访问,返回js函数。因为onclick及其他事件处理程序属性本身就应该被赋予函数值。  
 - setAttribute(),  
   接受要设置的特性名和值,如果存在就替换。
 - removeAttribute
   彻底删除元素特性

attributes属性
存在一个NamedNodeMap集合,每个元素的每一个特性作为节点保存在其中

  • getNamedItem()
  • removeNamdItem()
  • setNamedItem() item()

创建元素
document.createElement(),接受创建元素的标签名,并且也可以传入完整元素标签,并包括属性。创建完之后使用appendChild()、insertBefore()、或replaceChild()、追加到父元素上面。

  • 其他类型

    • Text类型
      使用createTextNode()创建新文本节点,接受要插入节点中的文本
      使用normalize()规范化文本
      使用splitText()分割文本

    • Comment类型

    • CDATASection类型

    • DocumentType类型

    • DocumentFragment类型

    • Attr类型

DOM操作

  • 动态样式

    使用< link >元素包含来自外部的文件
    使用< style >指定嵌入的样式
    
  • 操作表格

    创建<table>
    创建tbody,并追加到table中
    创建tr,追加到tbody中
    创建td,
    最后把table追加到body中
    
  • NodeList

    每当文档结构发生变化,NodeList都会发生更习惯,保存着最新最准确的信息,
    该对象在访问DOM文档时实时运行的查询。
    所有为了代码运行更轻松,资源消耗更小,应减少访问NodeList次数(该访问都会运行一次基于文档的查询)
    

DOM扩展

选择符API

在上面的获取元素的方法中,并不存在根据CSS选择符来获取的方法。实现浏览器元素支持CSS查询,
需要一个基础的CSS解析器,然后用已有的DOM方法查询文档并找到匹配的节点。
并且选择符API,可以把解析和树查询在浏览器内部编译后完成,提高了性能。
  • querySelector(),接受一个CSS选择符,返回匹配的第一个元素或null
  • querySelectorAll(),返回一个NodeList实例

元素遍历

对节点的访问,解决了元素间的空格问题添加了新属性:

 - childElementCount,返回子元素个数 
 - firstElementChild,返回第一个子元素
 - previousElementSibling,指向前一个同辈元素 
 - nextElementSibling,指向后一个同辈元素

对于HTML5的扩充

  • 与类相关

getElementsByClassName
获取指定元素中具有指定 class 的所有节点(一个Node List)。
多个 class 可的选择可使用空格分隔,与顺序无关。只有位于元素子树中的元素才会返回。

  • 焦点相关

    元素获得焦点的方式:页面加载、用户输入和使用focus()方法,
    使用document.activeElement可以获得document.body的引用,
    而且文档加载期间,返回null。
    使用hasFocus(()可以检测是否获得焦点

  • HTMLDocument中的扩展

使用readyState属性,检测文档是否已经加载完成:会返回loading或complete
兼容模式:IE提供document.compatMode获取标准模式CSS1Compat,或混杂模式BackCompat

  • 自定义属性

为原始添加非标准的属性,但是要添加前缀data-。添加之后,可以通过元素的dataset属性访问自定义属性的值,返回一个DOMStringMap实例

  • 插入标记

    减少了插入标记带来的创建节点和连接节点的麻烦,直接插入HTML字符串更方便更快。

    • innerHTML
      获取或设置指定节点之中所有的 HTML
      内容。替换之前内部所有的内容并创建全新的一批节点(去除之前添加的事件和样式)。innerHTML 不检查内容,直接运行并替换原先的内容。
    • outerHTML
      返回调用它的元素及所有子节点的HTML标签(读模式下)
      根据指定的HTML字符串创建新的DOM字数,用这个DOM字数完全替换调用元素
      因为上面的方法在使用过程中,某个元素有个事件处理程序,在使用上述属性将该元素从文档树中删除后,元素与实际处理程序之间的绑定关系在内存中并没有一并删除。所有最后先手动删除要被替换的元素的所有事件处理程序和对象属性。

专有扩展

  • children属性

    只返回包含元素中同样还是元素的子节点

  • 插入文本

    • innerText
      操作元素中包含的所有内容 可以按照由浅入深顺融,将子文档书中的文本拼接起来返回
      写入值时,会删除所有子节点,插入包含相应文本值得文本节点
    • outerText
      可以按照由浅入深顺融,将子文档书中的文本拼接起来返回 写入值时,替换整个元素
  • 滚动

    • scrollIntoViewIfNeeded(alignCenter):只在当前元素在视口中不可见得情况下,才滚动浏览器窗口或容器元素,最终让它可见。

    • scrollByLines(lineCount):将元素得内容滚动指定得行高

    • scrollByPages(pageCount):将元素内容滚动指定的页面高度。

    • scrollIntoView()

猜你喜欢

转载自blog.csdn.net/ningpeixi679/article/details/113059775