zoukankan      html  css  js  c++  java
  • Html 3:DOM

    HTML 3:DOM


    1、概述

    2、查找

    3、操作

    4、事件


    一、概述

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。

    DOM把网页和脚本以及其他的编程语言联系了起来。DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容。

    二、查找

    1、直接找

    获取单个元素

    document.getElementById('i1') 根据ID获取一个标签

    获取多个元素(列表)

    document.getElementsByName           根据name属性获取标签集合

    document.getElementsByClassName('c1')    根据class属性获取标签集合

    document.getElementsByTagName('div')      根据标签名获取标签集合

    2、间接查找

    parentNode      // 父节点

    childNodes      // 所有子节点
    firstChild      // 第一个子节点
    lastChil        // 最后一个子节点
    nextSibling      // 下一个兄弟节点
    previousSibling   // 上一个兄弟节点
    parentElemen     // 父节点标签元素
    children        // 所有子标签
    firstElementChild  // 第一个子标签元素
    lastElementChild   // 最后一个子标签元素
    nextElementtSibling // 下一个兄弟标签元素
    previousElementSibling  // 上一个兄弟标签元素

    三、操作

    1、文本内容操作

    innerText 仅文本

      获取标签中的文本内容

      标签.innerText

      对标签内部文本进行重新复制

      标签.innerText = ""

    outerText

    innerHTML 全内容

      value:值

      input value获取当前标签中的值select 获取选中的value值(selectedIndex select标签特有的方法)

      testarea value获取当前标签中的值

      (搜索框的示例)

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8     <div style=" 600px;margin: 0 auto">
     9         <input id="i1" onfocus="Focus()" onblur="Blur()"  type="text" value="请输入关键字"/>
    10         <!--现在版本浏览器只需写下面一句-->
    11         <input type="text" placeholder="请输入关键字">
    12     </div>
    13     <script>
    14         function Focus(){
    15             var tag = document.getElementById("i1");
    16             var val = tag.value;
    17             if(val == "请输入关键字"){
    18                 tag.value = ""
    19             }
    20         }
    21         function Blur() {
    22             var tag = document.getElementById("i1");
    23             var val = tag.value;
    24             if (val.length == 0) {
    25                 tag.value = "请输入关键字"
    26             }
    27         }
    28     </script>
    29 </body>
    30 </html>
    搜索框

    2、class样式操作

    innerHTML 全内容value:值

    className  //获取所有类名(直接整体做操作)

    classList.remove(cls)   //删除指定类

    classList.add(cls)  //添加类

    3、属性操作

    obj.setAttribute(key,value)  //设置标签属性

    obj.removeAttribute  //移除标签属性

    obj.attributes  //获取所有标签属性

    getAttribute(key)  //获取指定标签属性

    1 /*
    2 var atr = document.createAttribute("class");
    3 atr.nodeValue="democlass";
    4 document.getElementById('n1').setAttributeNode(atr);
    5 */
    示例

    4、标签操作

    4.1、创建标签并添加到HTML中

    a、字符串方式

    var tag = "<a class='c1' href='http://www.cnblogs.com'>zz</a>"

    b、对象的方式

    var tag = document.createElement('a')

    tag.innerText = "zz"

    tag.className = "c1"

    tag.href = "http://www.cnblogs.com"

    4.2、操作标签

    方式一

    var obj = "<input type='text' />";

    xxx.insertAdjacentHTML("beforeEnd",obj);

    xxx.insertAdjacentElement('afterBegin',document.createElement('p'))

    //注意:第一个参数只能是'beforeBegin'、 'afterBegin'、 'beforeEnd'、 'afterEnd'

    方式二

    var tag = document.createElement('a')

    xxx.appendChild(tag)

    xxx.insertBefore(tag,xxx[1])

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8     <input type="button" onclick="AddEle1();" value="+"/>
     9     <input type="button" onclick="AddEle2();" value="+"/>
    10     <div id="i1">
    11         <p><input type="text"/>
    12         </p>
    13     </div>
    14     <script>
    15         function AddEle1(){
    16             var tag = "<p><input type='text'/></p>";
    17 //            注意:第一个参数只能是'beforeBegin'、'afterBegin'、'beforeEnd'、'afterEnd'
    18             document.getElementById('i1').insertAdjacentHTML("beforeEnd",tag)
    19         }
    20         function AddEle2(){
    21             var tag = document.createElement("input");
    22             tag.setAttribute('type','text');
    23             tag.style.fontSize = '16px';
    24             tag.style.color = 'red';
    25             var p = document.createElement('p');
    26             p.appendChild(tag)
    27             document.getElementById('i1').appendChild(p);
    28         }
    29     </script>
    30 </body>
    31 </html>
    标签操作

    5、提交表单

    任何标签通过DOM都可以提交表单

    document.getElementById('f1').submit()

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8     <form id="f1" action="http://www.baidu.com">
     9         <input type="text" />
    10         <input type="submit" value="提交" />
    11         <a onclick="submitForm();">提交</a>
    12     </form>
    13 
    14     <script>
    15         function submitForm(){
    16             document.getElementById('form').submit()
    17         }
    18     </script>
    19 </body>
    20 </html>
    提交表单

    6、样式操作

    var obj = document.getElementById('i1')

    obj.style.fontSize = "32px";

    obj.style.backgroundColor = "red";

    (搜索框)

    7、位置操作

    总文档高度:document.documentElement.offsetHeight  

    前文档占屏幕高度:document.documentElement.clientHeight  

    自身高度:tag.offsetHeight 

    距离上级定位高度:tag.offsetTop  

    父定位标签:tag.offsetParent  

    滚动高度:tag.scrollTop

    8、其他操作

    console.log  #输出框

    alert  #弹出框

    var v = confirm(信息) v: true false  #确认框

    location.href(获取当前url)

    location.href = "" #重定向 跳转

    location.reload() #页面刷新

    // 定时器

    setInterval 多次定时器

    clearInterval 清除多次定时器

    setTimeout 单次定时器

    clearTimeout 清除单次定时器

     1 var obj = setInterval(function(){
     2     console.log(1)
     3     clearInterval(obj)
     4 },5000)
     5 clearInterval(obj)
     6 //定时器只执行一次
     7 setTimeout(function(){
     8     console.log(1);
     9 },5000)
    10 //定时器一直执行
    11 
    12 //弹出信息定时消失案例
    13 <!DOCTYPE html>
    14 <html lang="en">
    15 <head>
    16     <meta charset="UTF-8">
    17     <title></title>
    18 </head>
    19 <body>
    20     <div id="status"></div>
    21     <input type="button" value="删除" onclick="DeleteEle();" />
    22     <script>
    23         function DeleteEle(){
    24             document.getElementById('status').innerText = '已删除';
    25             setTimeout(function(){
    26                 document.getElementById('status').innerText =""
    27             },2000)
    28         }
    29     </script>
    30 </body>
    31 </html>
    定时器

    四、事件

    js与html的交互就是通过事件的

    1、事件流:从页面中接收事件的顺序

    IE:事件冒泡流,事件从最具体的元素接收,然后逐级向上传播,主流浏览器都支持

    Netscape:事件捕获流,从最不具体的节点向下逐级传播到最具体的节点

    w3c:任何发生在w3c事件模型中的事件,首是进入捕获阶段,直到达到目标元素,再进入冒泡阶段。对于正常的web开发,可以选择是在捕获阶段还是冒泡阶段绑定事件处理函数,这是通过addEventListener()方法实现的。所以一般常用的是事件冒泡,很少使用事件捕获

    事件流包括三个阶段:事件捕获阶段,处于目标阶段和事件冒泡阶段,默认在捕获阶段是不调用事件处理程序的,在冒泡阶段触发

    2、事件处理程序

    事件:某种动作,比如click
    事件处理程序,响应某个事件的函数,比如onclick
     
    html事件处理程序:
      <buttonid="btn"onclick=show()>点我呀</button>
      事件对象是event
    DOM0级事件处理程序:兼容性好,缺点是会事件覆盖,是事件冒泡的
      添加:
      document.getElementById('btn').onclick=function() { }
      移除事件处理程序
      document.getElementById('btn').onclick = null
      ie8下事件对象是window.event,其他是event
    DOM2级事件处理程序
      添加
      document.getElementById('btn').addEventListener('click',function() { });
      ie8:attachEvent(‘click’,function(){ }),只有两个参数,默认将事件添加到冒泡阶段
      移除
      document.getElementById('btn').removeEventListener('click',添加时的回到函数);
      ie8:detachEvent(‘click’,function(){ })
      如果添加时使用的是匿名函数,移除时就算和代码写的一样,也是移除不掉的,因为两个函数不是同一个引用
      第三个参数是一个布尔值:true:在捕获阶段调用事件处理程序,false:在冒泡阶段调用事件处理程序(默认)
      事件对象都是event

    3、事件类型

    DOM3级事件规定了以下几类事件,ie9也支持DOM3级事件

      1-UI(用户界面事件):当用户与页面的上的元素交互时发生,但不一定与用户操作有关的事件。

      load事件:当页面加载完毕时在qindow上触发,当图像加载完毕时在ing元素上触发,等等,页面完全加载完毕(包括所有图像,js文件,css等外部文件资源)时触发

      img只要设置了src就会下载

      unload事件:当页面完全卸载时在window上触发,等等,当一个页面切换到另一个页面时就会触发,经常利用这个事件来清除引用,减少内存的泄露

      error:当发生js错误时在window上触发,当图像无法加载时在img上触发

      abort事件:当用户停止下载过程时,如果嵌入的内容没有加载完成,则在object元素上触发

      select:当用户选择文本框(input或textarea)中的一或多个字符时触发

      resize:当窗口或框架的大小发生改变时在window上触发

      scroll:当用户滚动带滚动条的元素中的内容时,在该元素上触发

      2-焦点事件:当元素获得焦点或失去焦点时触发

      blur:失去焦点时触发,这个事件不会冒泡

      focus:获得焦点时触发,不冒泡

      focusin:在获得焦点时触发,但他冒泡,DOM3新增

      focusout:在失去焦点时触发,冒泡

      3-鼠标事件:当用户通过鼠标在页面上执行操作时触发

      click:单击事件,用户单机鼠标按钮(一般是左键)或按下回车键时触发

      dbclick:双击事件,当双击鼠标时触发(一般是左键)

      mousedown:当用户在按下任意鼠标按钮时触发

      mouseup:当用户释放鼠标按钮时触发

      mouseenter:在鼠标光标从外部首次(是指每次进入元素,并不是只执行一次)时触发,而且这个事件不冒泡,而且在光标移到到后代元素上不会触发(从父区域进入子区域,再从子区域进入父区域是不会触发的,因为他认为子区域也是他的一部分),DOM3定义的

      mouseleave:和mouseenter是一对,刚好相反

      mousemove:当鼠标指针在元素内部移时重复的触发

      mouseout:当鼠标指针位于一个元素上方,然后移到到另一个元素上方时触发,另一个元素可能是外部元素也可能是他的后代元素,因为他不认为后代元素所在的区域是他的一部分

      mouseover:和mouseout是一对,恰好相反 

      4-滚轮事件:当使用鼠标滚轮(或类似事件)时触发

      mousewheel:跟踪鼠标滚轮或笔记本触摸板

      5-文本事件:当在文档中输入时触发

      textinput:在文本显示给用户之前更容易拦截文本,是对keypress的补充

      可编辑区输入字符键才可以出发

      ie9才支持,firefox不支持

      6-键盘事件:当用户通过键盘在页面上执行操作时触发

      keydown:用户按下键盘上的任意键时触发,而且按住不放的话,会重复触发此事件

      keypress:用户按下键盘上的字符键时触发,而且按住不放的话,会重复触发此事件,按下esc也会触发

      keyup:用户释放键盘上的键时触发

      所有元素都支持这三个事件 

      keydown-》keypress-》textinput-》keyup

      keyup和keydown的event有个keycoe属性,代表键盘码,与ASCII相对应

      7-合成事件:当为IME(input method editor,输入法编辑器)输入字符触发

      同时按下几个键才能输入一个字符

      8-变动事件:当底层DOM结构发生变化时触发

      DOM结构发生变化时触发

      

    4、事件操作

    行为(js)样式 (css)结构(html)相分离的页面?

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6     <style>
     7         #test{
     8             background-color: red;width: 300px;height: 400px;
     9         }
    10     </style>
    11 </head>
    12 <body>
    13     <div id="test">asdf</div>
    14 
    15     <script>
    16         var mydiv = document.getElementById("test");
    17         mydiv.onclick = function(){
    18             console.log(123)
    19         }
    20     </script>
    21 </body>
    22 </html>
    示例

    绑定事件两种方式:

    a、直接标签绑定 onclick = 'xx()'

    b、先获取Dom对象,然后绑定

      document.getElementById('xx').onclick

      this:当前触发事件的标签

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8     <table border="1" width="300px">
     9         <tr onmouseover="t1(0);" onmouseout="t2(0)"><td>1</td><td>1</td><td>1</td></tr>
    10         <tr onmouseover="t1(1);" onmouseout="t2(1)"><td>1</td><td>1</td><td>1</td></tr>
    11         <tr onmouseover="t1(2);" onmouseout="t2(2)"><td>1</td><td>1</td><td>1</td></tr>
    12     </table>
    13     <script>
    14         function t1(n){
    15             var myTrs = document.getElementsByTagName("tr")[n];
    16             myTrs.style.backgroundColor = 'red'
    17         }
    18         function t2(n){
    19             var myTrs = document.getElementsByTagName("tr")[n];
    20             myTrs.style.backgroundColor = ''
    21         }
    22 
    23     </script>
    24 </body>
    25 </html>
    Dom-0
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8     <table border="1" width="300px">
     9         <tr><td>1</td><td>1</td><td>1</td></tr>
    10         <tr><td>1</td><td>1</td><td>1</td></tr>
    11         <tr><td>1</td><td>1</td><td>1</td></tr>
    12     </table>
    13     <script>
    14         var myTrs = document.getElementsByTagName('tr');
    15         for(var i=0;i<myTrs.length;i++) {
    16             myTrs[i].onmouseover = function () {
    17                 this.style.backgroundColor = 'red';
    18             };
    19             myTrs[i].onmouseout = function () {
    20                 this.style.backgroundColor = '';
    21             };
    22         }
    23     </script>
    24 </body>
    25 </html>
    Dom-1
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6     <style>
     7         #test{
     8             background-color: red;width: 300px;height: 400px;
     9         }
    10     </style>
    11 </head>
    12 <body>
    13     <div id="test">asdf</div>
    14     <script>
    15         var mydiv = document.getElementById("test");
    16 //        mydiv.onclick = function(){
    17 //            console.log(123)
    18 //        };
    19 //        mydiv.onclick = function(){
    20 //            console.log(456)
    21 //        }
    22         mydiv.addEventListener('click',function(){console.log('123')},false);
    23         mydiv.addEventListener('click',function(){console.log('456')},false);
    24     </script>
    25 </body>
    26 </html>
    Dom-2
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <style>
     8     #main{
     9         background-color: red;
    10         width: 300px;
    11         height: 400px;
    12     }
    13     #content{
    14         background-color: pink;
    15         width: 150px;
    16         height: 200px;
    17     }
    18 </style>
    19 <body>
    20     <div id="main">
    21         <div id="content"></div>
    22     </div>
    23     <script>
    24         var mymain = document.getElementById('main');
    25         var mycontent = document.getElementById('content')
    26         //false 先出现content后出现main true先出现main后出现content
    27         //false捕捉模型,true冒泡模型
    28         mymain.addEventListener('click',function(){console.log('main')},false);
    29         mycontent.addEventListener('click',function(){console.log('content')},false)
    30     </script>
    31 
    32 </body>
    33 </html>
    Dom-2示例

    5、词法分析

    active object =>AO

    分析顺序:

    a、形式参数

    b、局部变量

    c、函数声明表达式

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8     <script>
     9         function t1(age){
    10             console.log(age); //function age(){}
    11             var age = 27;
    12             console.log(age); //27
    13             function age(){} //27
    14             console.log(age)
    15         }
    16         t1(3);
    17     </script>
    18 </body>
    19 </html>
    20 <!--
    21 1、形式参数
    22 AO.age = undefined;
    23 AO.age = 3;
    24 2、局部变量
    25 AO.age = undefined;
    26 3、函数声明表达式
    27 AO.age = function age(){}
    28 -->
    词法分析示例
  • 相关阅读:
    数据库与数据仓库的区别
    MySQL数据库与表的最基本命令大盘点
    SQL Server 2008创建数据库
    [HttpClient]简单使用GET请求
    [HttpClient]HttpClient简介
    [jQuery编程挑战]003 克隆一个页面元素及其相关事件
    [设计模式]观察者模式
    [jQuery编程挑战]002:实现一个转盘大抽奖
    [设计模式]备忘录模式
    [javascript]String添加trim和reverse方法
  • 原文地址:https://www.cnblogs.com/hy0822/p/9466925.html
Copyright © 2011-2022 走看看