DOM和DOM事件

DOM
  文档对象模型,浏览器提供给js操作html文档的api
  兼容性  IE 程序员噩梦
                                         Object(构造函数)
                                          Node(构造函数)
        Document(文档节点)  Element(元素节点)  Text(文本节点)  Comment(注释节点)
  属性和方法()
  Node.prototype
    属性
      nodeType  表示节点的类型
        Document--> 9;Element -->1;TextNode -->3;Comment--> 8
      nodeName  表示节点的名称
      nodeValue  该属性取决于节点类型,如果是元素类型,值有null
      childNodes    保存一个NodeList对象,NodeList是一种类数组对象用来保存一组有序的节点,NodeList是基于DOM结构动态执行查询的结果,DOM结构变化可以自动反应到NodeList对象中。访问时可以通过中括号访问,也可以通过item()方法访问。可以使用slice方法将NodeList转换为数组
      parentNode  指向文档树中的父节点
      previousSibling  兄弟节点中的前一个节点
      nextSibling  兄弟节点中的下一个节点
      firstChild  childNodes列表中的第一个节点
      lastChild     childNodes列表中的最后一个节点
      ownerDocument     指向表示整个文档的文档节点。任何节点都属于它所在的文档,任何节点都不能同时存在于两个或更多个文档中
    方法
      操作节点
        注意:以下四个方法都是需要父节点调用
        appendChild(p)  往父元素中添加一个新的节点
        insertBefore(p,h)  第一个参数:要插入的元素;第二个参数:参照元素,把p插入到h之前
        replaceChild(p,h)  第一个参数:要插入的元素;第二个参数:要替换的元素,用p把h替换掉
        removeChild(h)  参数:是要移除的参数,移除h元素
      其他方法
        cloneNode  克隆一个节点,不会克隆子节点,如果想要克隆子节点,添加参数true
        normalize() 处理文档树中的文本节点,由于解析器的实现或DOM操作等原因,可能会出现文本节点不包含文本,或者接连出现两个文本节点,当在某个节点上调用了该方法,会删除空白节点,会找到相邻的两个文本节点,并将他们合并为一个文本节点。


  Document.prototype
    都可以继承Node中的所有属性和方法
      属性
        documentElement    始终指向HTML页面中的<html>元素。
          body    直接指向<body>元素
          doctype  访问<!DOCTYPE>, 浏览器支持不一致,很少使用
          title     获取文档的标题
          URL  取得完整的URL
          domain  取得域名,并且可以进行设置,在跨域访问中经常会用到。服务器测
          referrer    取得链接到当前页面的那个页面的URL,即来源页面的URL。
          images  获取所有的img对象,返回HTMLCollection类数组对象
           forms     获取所有的form对象,返回HTMLCollection类数组对象
          links     获取文档中所有带href属性的<a>元素


      方法
        查找元素
          getElementById()  参数为要取得元素的ID,如果找到返回该元素,否则返回null。如果页面中多个元素的ID值相同,只返回文档中第一次出现的元素。如果某个表单元素的name值等于指定的ID,该元素也会被匹配。
          getElementsByTagName()  参数为要取得元素的标签名,返回包含另个或者多个元素的NodeList,在HTML文档中该方法返回的是HTMLCollection对象,与NodeList非常类似。可以通过[index/name],item(),namedItem(name)访问
            getElementsByName()  参数为元素的name,返回符合条件的NodeList
            getElementsByClassName()  参数为一个字符串,可以由多个空格隔开的标识符组成。当元素的class属性值包含所有指定的标识符时才匹配。HTML元素的class属性值是一个以空格隔开的列表,可以为空或包含多个标识符。


  Element.prototype
      属性
        id            元素在文档中的唯一标识符
          title            有关元素的附加说明信息
          className        与元素class特性对应
          src            img元素具有的属性
          alt            img元素具有的属性
          lang        元素内容的语言代码,很少使用!
          dir            语言方向,ltr,rtl 左到右,右到左、
        <ul>
                <li>item1</li>
                <li>item2</li>
            </ul>
            ie8及以下版本浏览器    2个子节点
            其他浏览器        5个子节点
        style     通过getAttribute()访问时,返回的style特性值中包含的是CSS文本,而通过属性来访问返回一个对象,由于style属性是用于以编程方式访问元素样式的,因此并没有直接映射到style特性
            onclick    类似的事件处理程序,通过getAttribute()访问时,返回相应代码字符串;访问onclick属性时,返回一个javascript函数
        children    类似于childNodes,返回NodeList对象,但是该对象中仅包含Element对象
          firstElementChild    第一个孩子元素节点    
          lastElementChild    最后一个孩子元素节点
          nextElementSibling    下一个兄弟元素节点
          previousElementSibling    上一个兄弟元素节点
          childElementCount     子元素的数量,返回值和children.length值相等
        innerHTML  返回元素内容,包括html标签
          innerText   元素内部的文本,去除回车和换行
          textContent  元素内部的文本,不去除空格和回车


      方法
        getAttribute()  获取自定义属性
        setAttribute()  设置属性
        removeAttribute()  移除属性
        document.createElement()  参数为要创建元素的标签名。该标签名在HTML中不区分大小写,但是在XML中区分大小写
      text类型
        length  文本长度
        appendData(text)    追加文本
        deleteData(beginIndex,count)    删除文本
        insertData(beginIndex,text)     插入文本
        replaceData(beginIndex,count,text)    替换文本
        splitText(beginIndex)  从beginIndex位置将当前文本节点分成两个文本节点
        document.createTextNode(text)     创建文本节点,参数为要插入节点中的文本
        substringData(beginIndex,count)  从beginIndex开始提取count个子字符串

 

 

DOM事件
  用户使用js和浏览器交互
  1)事件三要素
    事件源
    事件处理函数
    事件对象
    var btn = document.getElementById("btn")
    btn事件源
    btn.onclick = function(e){
        //事件处理函数

        //e事件对象
    }


  2)绑定事件的方式
    1.btn.onclick = function(e){}
    2.<div οnclick='handler()'>点我</div>
      <script>
        function handler(){

        }
      </script>
    3.addEventListener("click",handler)  //IE9+  添加事件
      removeEventListener("click",handler)  //IE9+  移除事件
      attachEvent("onclick",handler)  //IE9-  添加事件
      detachEvent("onclick",handler)  //IE9-  移除事件


  3)事件流
    事件冒泡(由内向外)
      var box1 = document.getElementById('box1')
      var box2 = document.getElementById('box2')
      var box3 = document.getElementById('box3')
      // 事件冒泡
      box1.onclick = function(){
          console.log('box1')
      }
      box2.onclick = function(){
          console.log('box2')
      }
      box3.onclick = function(){
          console.log('box3')
      }
      document.body.onclick = function(){
          console.log('body')
      }
      box3 =>box2 =>box1 =>body =>html


    事件捕获(由外向内)
    事件流分为三个阶段
      事件捕获
      事件执行
      事件冒泡
  4)事件处理函数
    事件处理函数以on开头
      btn.onclick = function(e){

      }
  5)事件对象
       属性                 类型              说明
    bubbles                  Boolean         事件是否冒泡
    cancelable              Boolean         是否可取消事件默认行为
    currentTarget          Element         事件处理程序当前正在处理事件的那个元素
    eventPhase              Integer         调用事件处理程序的阶段;1捕获 2处于目标 3冒泡
    target                  Element         事件真正目标
    type                  String         事件类型,需要一个函数,处理多个事件时,可使用该属性。
    preventDefault()      Function         取消事件的默认行为
    stopPropagation()     Function         取消事件的进一步捕获或者冒泡
  6)事件类型
    load  当页面完全加载后在window上触发,当所有框架加载完时在框架集上触发,当图像加载完毕时在img元素上触发,当嵌入的内容加载完时在<object>触发        
    unload    当页面完全卸载后在window上触发,当所有框架都卸载后在框架集上触发,当嵌入的内容卸载完毕后再<object>上触发,(firefox不支持)
    select    当用户选择文本框(<input>,<textarea>)中的一个或多个字符时
    change  在select的下拉列表的选中的选项更改的时候触发
    resize    当浏览器窗口被调整到一个新的高度或者宽度时,会触发
    scroll    当用户滚动带滚动条的元素中的内容时,在该元素上触发resize,scroll会在变化期间重复被激发,尽量保持代码简单
    blur  元素失去焦点的时候触发
      focus  元素获得焦点的时候触发,不支持冒泡    


  7)事件代理(事件委托)
    将事件绑定在元素的父元素上,通过事件对象的target
      var nav = document.getElementById('nav')
      nav.onclick = function(e){
          // 打印事件对象
          console.log(e)
          if (e.target.innerHTML === 'html') {
              alert('html')
          }else if (e.target.innerHTML === 'css') {
              alert('CSS')
          }else{
              alert('javascript')
          }
      }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值