首页 > 代码库 > DOM基础 day1

DOM基础 day1

一、什么是DOM

  DOM的全称是Document  Object  Model(文档对象模型),又称为文档树模型,是一套操作HTML和XML文档的API(应用程序接口)。其中“D”指的是document(文档),也可以理解成浏览器的页面,“O”指的是object(对象),对象包括属性和方法,“M”指的是model(模型)或是map(地图),代指某种事物的表现形式。“DOM描绘了一个层次化的节点树,允许开发人员添加、移除和修改页面的某一部分,学习DOM就是学习封装好的操作页面的API。

二、DOM的组成

  DOM由节点组成,文档是由节点构成的集合,每个文档的根节点都是html,节点又可以分为:元素节点(标签节点)、属性节点、文本节点和注释节点,分别代表着标签、属性、文本和注释,其中文档中的空白(换行、空格)均为文本节点。

三、获取页面元素的方法

3.1 document.getElementById(“id名”) ——返回唯一确定的对象

  通过标签的Id获得元素,得到的是唯一的页面标签对象,其中id值必须由双引号或单引号包裹。一般情况下,我们会引入一个变量存储返回的对象,方便后期的使用。

var box = document.getElementById(“box”);

3.2 document.getElementsByTagName(“标签名”);——返回标签名相同的数组

  通过标签名获得对象,返回一个数组(即使只有一个也是数组),通过索引来获得想要操作的元素

扩展1:可以通过通配符来获得页面总共有多少个标签节点

alert(document.getElementsTagName(“*”).length);

扩展2:与id获取方式能过提高精度

var ul = document.getElementById(“ul”);var lis = ul.getElementsByTagName(“li”);

3.3 document.getElementsByClassName(“标签类名”)——返回类名相同的数组

  通过标签的类名获得元素,返回的也是一个数组,在Js中不推荐使用这种方式,存在兼容性问题,通过下面的函数封装后能够适用于新老浏览器,慎用。

function getElementsByClassName(node,classname){              if(node.getElementsByClassName) {    //如果浏览器支持,直接返回                     return node.getElementsByClassName(classname);              } else{                   //如果浏览器不支持则先获得所有标签节点,然后遍历并返回类名相同的数组                     var results = new Array();                     var elems = node.getElementsByTagName(“*”);                     if (var i=0;i<elems.length;i++){                            if(eles[i].className.indexOf(classname) != -1) {                                   results[results.length] = elems[i];                            }                     }              }         }

四、事件初涉

4.1 什么是事件

  文档或浏览器窗口中发生的一些特定的交互瞬间

4.2 事件三要素

  事件源                             要给谁注册事件

  事件类型                         要给事件源注册什么样的事件

  事件处理程序                要执行的代码,去达到某种效果 函数或是匿名函数

4.3 书写时间的位置

第一个是内嵌式  就是写在一对script标签之间

<script>  var btn = document.getElementById(“btn”);   btn.onclick = function(){     alert(1);   }</script>

第二个是行内式,就是在标签之内写事件

<input type=”button” value=http://www.mamicode.com/”确定” onclick=”fn();”/>

第三个是外链式,调用外部的js文件

<script src=http://www.mamicode.com/”common.js”></script>//外部要有一个相同名称的js文件

注意:内嵌式的方式必须紧靠在</body>上方放置,而不是在<head>中。为了等待body中的元素加载完成再执行js文档,否则通过id的方式将无法获得正确的对象

4.4 注册事件的方式

第一种是使用on的方式注册事件

onclick

单击鼠标左键触发

ondblclick

双击鼠标左键触发

onmouseover

鼠标悬浮触发

onmouseout

鼠标离开触发

onmousemove

鼠标移动触发

onmousedown

鼠标按下的瞬间触发

onmouseup

鼠标按下后抬起的瞬间触发

onfocus

获取焦点时触发

onblur

失去焦点时触发

       第二种是addEventListener(后面讲的,有兼容性的问题)

五、重点案例

5.1 两个按钮实现单击显示和隐藏一个盒子(box,btn1,btn2)

注:display用于更改个数较少时的样式,className用于批量更改

var box = document.getElementById(“box”);var btn1 = document.getElementById(“btn1”);var btn2 = document.getElementById(“btn2”);btn1.onclick = function(){       box.style.display = “none”;}btn2.onclick = function(){        box.style.display = “block”;}

5.2 一个按钮实现单击显示和隐藏一个盒子(box,btn)

var box = document.getElementById(“box”);  var btn = document.getElementById(“btn”);  btn.onclick = function(){         if(btn.innerHTML == “隐藏”){//btn.value(input的方式写)                box.style.display = “none”;                btn.innerHTML = “显示”;//btn元素在的内容         }else{                box.style.display = “block”;                btn.innerHTML = “隐藏”;         }  }

5.3 两个按钮实现单击现实和隐藏多个盒子(boxes,btn1,btn2)

var btn1 = document.getElementById(“btn1”);var btn2 = document.getElementById(“btn2”);var boxes = document.getElementsByTagName(“div”);btn1.onclick = function(){
  for(var i=0;i<boxes.length;i++){
    boxes[i].style.display
= “none”;
  }
}btn2.onclick
= function(){
  for(var i=0;i<boxes.length;i++){  boxes[i].style.display = “block”;
  }}

5.4 一个按钮实现单击显示和隐藏多个盒子(boxes,btn)

var btn = document.getElementById(“btn”);var boxes = document.getElementsByTagName(“div”);btn.onclick = function(){  if(btn.innerHTML == “隐藏”){    for(var i=0;i<boxes.length;i++){      boxes[i].style.display = “none”;    }    btn.innerHTML = “显示”;  }else{    for(var i=0;i<boxes.length;i++){      boxes[i].style.display = “block”;    }    btn.innerHTML = “隐藏”;  }
}

5.5 图片切换:点击小图片的链接在站位图片位置出现对应的大图并显示图片名称 

<body>
  <h1>美女相册</h1>  <a href=http://www.mamicode.com/”images/1.jpg” title=”美女1”>>  <script>
    var links = document.getElementsByTagName(“a”);    var placeholder = document.getElementById(“placeholder”);    var des = document.getElementById(“des”);  for(var i=0;i<links.length;i++){ links[i].onclick = function(){ placeholder.src = http://www.mamicode.com/this.href; des.innerHTML = this.title;//this指此时被点击的图片链接 return false;//返回值为false时,链接不跳转 } }
  </script>
</body>

DOM基础 day1