zoukankan      html  css  js  c++  java
  • BOM和DOM

    BOM和DOM

    一、BOM

    1. BOM是browser object model的缩写,简称浏览器对象模型
    2. 2.     BOM提供了独立于内容而与浏览器窗口进行交互的对象[o1] 
    3. 3.     由于BOM主要用于管理窗口与窗口之间的通讯,因此其核心对象是window
    4. 4.     BOM一系列相关的对象构成,并且每个对象都提供了很多方法与属性
    5. 5.     BOM缺乏标准,JavaScript语法的标准化组织是ECMADOM的标准化组织是W3C
    6. 6.     BOM最初是Netscape浏览器标准的一部分

    二、DOM

    1. DOM: 文档对象模型
    2. HTML DOM 树

      

    1. 通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。

    a)       JavaScript 能够改变页面中的所有 HTML 元素

    1.                              i.           通过 id: getElementById
    2.                             ii.           通过标签名: getElementsByTagName ,返回的是一个数组
    3.                           iii.           通过类名: getElementsByClassName ,返回的是一个数组

    b)      JavaScript 能够改变页面中的所有 HTML 属性

    1.                              i.           修改 HTML 内容的最简单的方法时使用 innerHTML 属性。
    2.                             ii.           如需改变 HTML 元素的属性:document.getElementById(id).attribute=新属性值
    3.                           iii.           改变了 <img> 元素的 src 属性:

    document.getElementById("image").src="landscape.jpg"

    c)       JavaScript 能够改变页面中的所有 CSS 样式

    1.                              i.           如需改变 HTML 元素的样式:

    document.getElementById(id).style.property=新样式[o2] 

     

    d)      JavaScript 能够对页面中的所有事件做出反应

    1.                              i.           HTML 事件的例子:
      1. 1.       当用户点击鼠标时:onclick
      2. 2.       当网页已加载时

    onload 和 onunload 事件会在用户进入或离开页面时被触发

    onload 事件可用于检测访问者的浏览器类型和浏览器版本,并基于这些信息来加载网页的正确版本。

    onloadonunload 事件可用于处理 cookie

    1. 3.       当图像已加载时
    2. 4.       当鼠标移动到元素上时:

    onmouseover :移入

    onmouseout :移出

    1. 5.       当输入字段被改变时:

    onchange 事件常结合对输入字段的验证来使用。

    <input type="text" id="fname" onchange="upperCase()">[o3] 

    1. 6.       当提交 HTML 表单时
    2. 7.       当用户触发按键时

    onmousedown, onmouseup 以及 onclick 构成了鼠标点击事件的所有部分。

    首先当点击鼠标按钮时,会触发 onmousedown事件;

    当释放鼠标按钮时,会触发 onmouseup事件;

    最后,当完成鼠标点击时,会触发 onclick事件。

                  8.   当输入字段获得焦点时: onfocus()获取焦点事件

    9.   当输入字段丢失焦点时: onblur()获取焦点事件[o4] 

    1.                             ii.           <button type="button"
      onclick="document.getElementById('id1').style.color='red'">
      点我!</button>
    1. 其他:

    a)       document.write() 可用于直接向 HTML 输出流写内容。

    b)      监听事件addEventListener() 方法

    1.                              i.           你可以使用 removeEventListener() 方法移除事件的监听
      1. 1.       element.removeEventListener("mousemove", myFunction);
      2.                             ii.           addEventListener() 方法用于向指定元素添加事件句柄
      3.                            iii.           addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。[o5] 
      4.                            iv.           你可以向一个元素添加多个事件句柄。[o6] 
      5.                             v.           你可以向同个元素添加多个同类型的事件句柄,如:两个 "click" 事件[o7] 
      6.                            vi.           可以向任何 DOM 对象添加事件监听,不仅仅是 HTML 元素。如: window 对象。
      7.                          vii.           addEventListener() 方法可以更简单的控制事件(冒泡与捕获)[o8] 
      8.                         viii.           当你使用 addEventListener() 方法时, JavaScript 从 HTML 标记中分离开来,可读性更强, 在没有控制HTML标记时也可以添加事件监听。
      9.                            ix.           语法:

    element.addEventListener(event, function, useCapture);[o9] 

    第一个参数是事件的类型 (如 "click" 或 "mousedown").

    第二个参数是事件触发后调用的函数

    第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。

    1.                             x.           addEventListener() 方法允许你在 HTML DOM 对象添加事件监听, HTML DOM 对象如: HTML 元素, HTML 文档, window 对象。或者其他支出的事件对象如: xmlHttpRequest 对象。[o10] 
    2.                            xi.           当传递参数值时,使用"匿名函数"调用带参数的函数:[o11] 
    3.                           xii.           事件冒泡或事件捕获?

    A.事件传递有两种方式:冒泡与捕获,事件传递定义了元素事件触发的顺序。

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

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

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

    C.addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型:

    addEventListener(event, function, useCapture);

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

    document.getElementById("myDiv").addEventListener("click", myFunction, true);

    1.                         xiii.           跨浏览器解决方法:

    var x = document.getElementById("myBtn");

    if (x.addEventListener) {                    // 所有主流浏览器,除了 IE 8 及更早版本

        x.addEventListener("click", myFunction);

    } else if (x.attachEvent) {                  // IE 8 及更早版本

        x.attachEvent("onclick", myFunction);

    }

    1. DOM元素(节点):即节点的增删改

    a)       添加节点:

    1.                              i.           首先首先创建文本节点createTextNode
    2.                             ii.           再创建该元素(元素节点):createElement
    3.                           iii.           接着必须创建该元素节点这个文本节点:para.appendChild(node);
    4.                           iv.           然后一个已存在的元素元素: appendChild:

    element.appendChild(para);

    b)      删除节点:[ DOM 需要清楚您需要删除的元素,以及它的父元素。]

    1.                              i.           首先找到你要删除的节点元素:

    var parent=document.getElementById("div1");

    1.                             ii.           再找到你要删除节点的父元素:

    var child=document.getElementById("p1");

    常用的解决方案:找到您希望删除的子元素,然后使用其 parentNode 属性来找到父元素。

    1.                           iii.           开删(从父元素中删除子元素):removeChild

    parent.removeChild(child);

    c)       替换

    1.                              i.           找到要被替换的节点

    var liTag = document.getElementById("apple"); 

    1.                             ii.           创建替换节点

    var textNode = document.createTextNode("平安果");

    1.                           iii.           开始替换

    liTag.replaceChild(textNode,liTag.firstChild);//firstChild指的是ID为apple的第一个孩子,而后面的就不能再被替换。

    d)      在指定元素之前插入:insertBefore

    e)       在指定元素之后插入:

    1.                              i.           extSibling返回相同节点树层级的下一个节
    2.                             ii.           insertBefore
    3. DOM手册:http://www.runoob.com/jsref/dom-obj-event.html

    a)       常用的:

    onclick(单击)  ondblclick(双击)

    onmou wn(按下鼠标) onmouseup(释放鼠标) onclick(完成鼠标点击)

    onmousemove(移入)  onmouseout(移出)

    onkeydown (键盘按键被按下) onkeypress(键盘按键被按下并松开) onkeyup (键盘按键被松开)

    onload    onunload(用户退出页面。 ( <body> 和 <frameset>))

    onfocus    onblur

    target      返回触发此事件的元素(事件的目标节点)。

    type        返回当前 Event 对象表示的事件的名称。

    addEventListener() 允许在目标事件中注册监听事件(IE8 = attachEvent())

    removeEventListener() 运行一次注册在事件目标上的监听事件(IE8 = detachEvent())

    button     返回当事件被触发时,哪个鼠标按钮被点击。      

    clientX   返回当事件被触发时,鼠标指针的水平坐标。      

    clientY    返回当事件被触发时,鼠标指针的垂直坐标。

    screenX 返回当某个事件被触发时,鼠标指针的水平坐标。      

    screenY 返回当某个事件被触发时,鼠标指针的垂直坐标。

    shiftKey          返回当事件被触发时,"SHIFT" 键是否被按下。

    keyCode 返回onkeypress事件触发的键的值的字符代码,或者 onkeydown 或 onkeyup 事件的键的代码。

    which 返回onkeypress事件触发的键的值的字符代码,或者 onkeydown 或 onkeyup 事件的键的代码。

    onresize(窗口或框架被重新调整大小)

    onsearch(用户向搜索域输入文本时触发 ( <input="search">))

    onsubmit(表单提交时触发)

    onselect

    (用户选取文本时触发 ( <input> 和 <textarea>)

    oninput(元素获取用户输入时触发)

    onreset(表单重置时触发)

    onpause 事件在视频/音频(audio/video)暂停时触发。        

    onplay    事件在视频/音频(audio/video)开始播放时触发。

    transitionend 该事件在 CSS 完成过渡后触发。

    三、图

    [o12] 


     [o1]

    与浏览器窗口交互的一些对象,例如可以移动,调整浏览器大小的window对象,可以用于导航的location对象与history对象,可以获取浏览器,操作系统与用户屏幕信息的navigator与screen对象,可以使用document作为访问HTML文档的入口,管理框架的frames对象等

     [o2]

    document.getElementById("p2").style.color="blue"; document.getElementById("p2").style.fontFamily="Arial"; document.getElementById("p2").style.fontSize="larger";

     [o3]当用户改变输入字段的内容时,会调用 upperCase() 函数。

     [o4]

    jQuery 事件参考手册 实例 当输入域失去焦点 (blur) 时改变其颜色: $("input").blur(function(){ $("input").css("background-color","#D6D6FF"); });...

     [o5]

    addEventListener() 方法允许向同个元素添加多个事件,且不会覆盖已存在的事件:

    element.addEventListener("click", myFunction);
    element.addEventListener("click", mySecondFunction);

     [o6]

    你可以向同个元素添加不同类型的事件:

    element.addEventListener("mouseover", myFunction);
    element.addEventListener("click", mySecondFunction);
    element.addEventListener("mouseout", myThirdFunction);

     [o7]

    ??一个对象可以有两个以上的点击事件吗?不会发生冲突吗?

     [o8]这点还不是很明白

     [o9]

    element.addEventListener("click", function(){ alert("Hello World!"); });

     [o10]

    当用户重置窗口大小时添加事件监听:

    window.addEventListener("resize", function(){
        document.getElementById("demo").innerHTML = sometext;
    });

     [o11]

    <body>

    <p>实例演示了在使用 addEventListener() 方法时如何传递参数。</p>

    <p>点击按钮执行计算。</p>

    <button id="myBtn">点我</button>

    <p id="demo"></p>

    <script>

    var p1 = 5;

    var p2 = 7;

    document.getElementById("myBtn").addEventListener("click", function() {

        myFunction(p1, p2);

    });

    function myFunction(a, b) {

        var result = a * b;

        document.getElementById("demo").innerHTML = result;

    }

    </script>

    </body>

     [o12]

    window对象是BOM的顶层(核心)对象,所有对象都是通过它延伸出来的,也可以称为window的子对象

    由于window是顶层对象,因此调用它的子对象时可以不显示的指明window对象。

    例如下面两行代码是一样的:

    document.write("www.dreamdu.com");

    window.document.write("www.dreamdu.com");

       

  • 相关阅读:
    HDU 3732 Ahui Writes Word
    HDU 1171 Big Event in HDU
    Instagram技术透析:Mike Krieger, Instagram at the Airbnb tech talk, on Scaling Instagram
    Linux查看网络即时网速
    An error was detected on device \Device\Harddisk3\DR3 during a paging operation.(传呼期间在设备 \Device\Harddisk1\D 上检测到一个错误。)
    piix4_smbus 0000:00:07.0: SMBus base address uninitialized upgrade BIOS or use force_addr=0xaddr
    How to change Intel WiFi Link 5100 AGN MAC addr(更改Intel WiFi Link 5100 AGN MAC地址)
    用设备管理器清理陈旧的设备信息(如U盘,COM,网卡等)
    压缩虚拟机硬盘(VMDK VDI)大小
    关于GRUB2引导grub4dos时"configfile"参数失效的问题
  • 原文地址:https://www.cnblogs.com/1124592765qq/p/5959509.html
Copyright © 2011-2022 走看看