zoukankan      html  css  js  c++  java
  • JavaScript ------ HTML DOM

    HTML DOM(Document Object Model):文档对象模型,当网页被加载时,浏览器会创建页面的文档对象模型

    主要就是了解到:

      如何改变 HTML 元素的内容 (innerHTML)

      如何改变 HTML 元素的样式 (CSS)

      如何对 HTML DOM 事件作出反应

      如何添加或删除 HTML 元素

    在 DOM 中,所有 HTML 元素都被定义为对象,属性是能够获取或设置的值(就比如改变 HTML 元素的内容),方法是您能够完成的动作(比如添加或删除 HTML 元素)

    1、查找 HTML 元素

    常用的:

    //通过 id 查找 HTML 元素,
    document.getElementById()
    //通过标签名查找 HTML 元素
    document.getElementsByTagName()
    //通过类名查找 HTML 元素
    document.getElementsByClassName()
    //通过 CSS 选择器查找 HTML 元素
    document.querySelectorAll("p.intro")
    //通过 HTML 对象集合查找 HTML 元素

    2、改变HTML 元素

    document.write() 可用于直接写入 HTML 输出流

    innerHTML 修改 HTML 文档内容

    //改变HTML样式
    //document.getElementById(id).style.property = new style
    document.getElementById("p2").style.color = "blue";
    
    //通过 style = "position: relative" 创建容器元素。
    //通过 style = "position: absolute" 创建动画元素

     3、添加和删除元素

     4、事件

    HTML DOM 允许 JavaScript 对 HTML 事件作出反应

    HTML 事件的例子:
        当用户点击鼠标时
        当网页加载后
        当图像加载后
        当鼠标移至元素上时
        当输入字段被改变时
        当 HTML 表单被提交时
        当用户敲击按键时

    onmousedown, onmouseup 以及 onclick 事件构成了完整的鼠标点击事件

      当鼠标按钮被点击时,onmousedown 事件被触发;然后当鼠标按钮被释放时,onmouseup 事件被触发;最后,当鼠标点击完成后,onclick 事件被触

    onclick 事件:鼠标点击事件时触发

    onmouseover 和 onmouseout 事件可用于当用户将鼠标移至 HTML 元素上或移出时触发某个函数

    onload 和 onunload 事件可用于处理 cookie

      onload 事件:当用户进入页面时触发,还可以用于检测访问者的浏览器类型和浏览器版本,然后基于该信息加载网页的恰当版本

      onunload 事件:当用户离开页面时时触发

    onchange 事件经常与输入字段验证结合使用

    一、HTML DOM 事件监听器  addEventListener

    addEventListener() 方法为指定元素指定事件处理程序,为元素附加事件处理程序而不会覆盖已有的事件处理程序,可以更简单的控制事件(冒泡与捕获)

    1、常用的是为两个参数的时候,第一个是参数类型,第二个是函数名,同一个元素添加多个事件,且不会覆盖已存在的事件

    //添加当用户点击按钮时触发的事件监听器:
    document.getElementById("myBtn").addEventListener("click", 函数名);

    当你使用 addEventListener() 方法时, JavaScript 从 HTML 标记中分离开来,可读性更强, 在没有控制HTML标记时也可以添加事件监听,就是HTML中没有事件代码

     addEventListener() 方法允许你在 HTML DOM 对象添加事件监听,

       HTML DOM 对象如: HTML 元素, HTML 文档, window 对象。或者其他支出的事件对象如: xmlHttpRequest 对象

    2、为三个参数的时候,可指定执行顺序

     事件传递有两种方式:冒泡与捕获。(指事件传递的触发顺序)

    语法:   默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。

    element.addEventListener(event, function, useCapture);
    //第一个参数是事件的类型 (如 "click" 或 "mousedown").
    //第二个参数是事件触发后调用的函数。
    //第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。
    //注意:不要使用 "on" 前缀。 例如,使用 "click" ,而不是使用 "onclick"。

    如将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?

      在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。

      在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件

    3、移除事件监听器   removeEventListener() 方法

    //第一参数为指定事件类型,第二参数为指定触发的函数名
    element.removeEventListener("mousemove", myFunction);

    4、跨浏览器解决方法

    var x = document.getElementById("myBtn");
    if (x.addEventListener) {                    // 所有主流浏览器,除了 IE 8 及更早版本
        x.addEventListener("click", myFunction);
    } else if (x.attachEvent) {                  // IE 8 及更早版本
        x.attachEvent("onclick", myFunction);
    }
    
    //IE 8 及更早 IE 版本,Opera 7.0及其更早版本不支持 addEventListener() 和 removeEventListener() 方法。
    //但是,对于这类浏览器版本可以使用
    element.attachEvent(event, function); //方法来增加事件句柄:
    element.detachEvent(event, function); //方法来移除事件句柄:

    二、HTML DOM 元素 (节点)

    1、在元素中增加元素,指定位置首部或尾部

    //1、创建 <p> 元素:
    var para = document.createElement("p");
    //2、为 <p> 元素创建一个新的文本节点
    var node = document.createTextNode("这是一个新的段落。");
    //3、将文本节点添加到 <p> 元素中
    para.appendChild(node);
    //4、获取需要存入的html元素的 id
    var element = document.getElementById("div1");
    //5、将需要添加的标签放到需要加入的元素位置
    element.appendChild(para);

    上述,使用了 appendChild() 方法,它用于添加新元素到尾部。如果我们需要将新元素添加到开始位置,可以使用 insertBefore() 方法:

    2、移出已经存在的元素  removeChild()

    var parent = document.getElementById("div1");
    var child = document.getElementById("p1");
    parent.removeChild(child);

    3、替换 HTML DOM 中的元素 replaceChild() 

    parent.replaceChild(para, child);

    三、HTMLCollection 与 NodeList 

    1、HTML DOM 集合(Collection)

    通过getElementsByTagName() 方法返回 HTMLCollection 对象

    主要就是:getElementsByTagName()获取到所有与指定的元素(标签)名称相同的以及元素中内容,通过 collectionName[ i ].innerHTML 的方式将元素中内容输出

    //修改所有 <p> 元素的背景颜色
    var myCollection = document.getElementsByTagName("p");
    var i;
    for (i = 0; i < myCollection.length; i++) {
        myCollection[i].style.backgroundColor = "red";
    }

    2、HTML DOM 节点列表

    NodeList 对象是一个从文档中获取的节点列表 (集合) 。

    通过 querySelectorAll() 方法返回NodeList 对象。

    //修改节点列表中所有 <p> 元素的背景颜色:
    var myNodelist = document.querySelectorAll("p");
    var i;
    for (i = 0; i < myNodelist.length; i++) {
        myNodelist[i].style.backgroundColor = "red";
    }

    注意:一些旧版本浏览器中的方法(如:getElementsByClassName())返回的是 NodeList 对象,而不是 HTMLCollection 对象。

    所有浏览器的 childNodes 属性返回的是 NodeList 对象。

    大部分浏览器的 querySelectorAll() 返回 NodeList 对象。

    3、HTMLCollection 与 NodeList 的异同

    不同:
      HTMLCollection 是 HTML 元素的集合,NodeList 是一个文档节点的集合。

      HTMLCollection 元素可以通过 name,id 或索引来获取,NodeList 只能通过索引来获取。只有 NodeList 对象有包含属性节点和文本节点。

    相同:

      NodeList 与 HTMLCollection 都与数组对象有点类似,可以使用索引 (0, 1, 2, 3, 4, ...) 来获取元素。

      NodeList 与 HTMLCollection 都有 length 属性。

      NodeList 与 HTMLCollection均不是一个数组。

      NodeList 与 HTMLCollection无法使用数组的方法: valueOf(), pop(), push(), 或 join() 。

  • 相关阅读:
    poj 3264 Balanced Lineup(st/线段树)
    Linux下的硬件驱动——USB设备(下)
    linux-2.6.14下USB驱动移植心得
    Linux下的硬件驱动——USB设备(上)
    在menuconfig中配置Linux内核裁剪的具体步骤
    Linux-2.6.32.2内核在mini2440上的移植(十)---配置USB外设
    ubuntu12.04下NFS安装
    make menuconfig时提示“error opening terminal”的解决方法
    linux系统日志编程
    socat用法
  • 原文地址:https://www.cnblogs.com/obge/p/14007020.html
Copyright © 2011-2022 走看看