什么是document对象?如何获取文档对象上的元素?_JavaScript面向对象编程

3333a3d51ce77a2cb713c2baefd1cd28.png

面向对象编程更符合人类对所接触世界的逻辑思维。把一个系统划分成一个个子系统,子系统又划分成一个个模块,系统分为一个对象,再给这次对象(模块)赋予属性、功能和方法。

创建对象的方式

1、字面量的方式

var student = {
 name:"蔡徐坤",
 type:"练习生",
 like:"唱跳rap篮球",
 rap:function(){
  console.log("鸡你太美")
 }
}
console.log(student)
student.rap()

这种方式写起来方便,但是如果要生成大量的类,就要写一堆重复的代码

2、工厂模式

function Student(name,type,like){
 return {
  name:name,
  type:type,
  like:like,
  rap:function(){
   console.log("鸡你太美")
  }
 }
}
var s1 = Student("蔡徐坤1","篮球运动员",'篮球')
console.log(s1)

所以用到工厂模式,可以快速生成批量的对象,缺点是对象同样的方法,每创建一个对象,都会生成一个同样新的函数,占用内存。

3、构造函数创建对象

//构造函数
function Teacher(){
 this.name = "苍老师";
 this.type = "老师";
 /*this.movies = function(){
  console.log("拍电影")
 }*/
}
 
//设置创建对象的原型函数
Teacher.prototype.movies = function(){
 console.log("拍电影1")
}
 
 
//如果不用new来构建函数,那么就是一个普通的函数调用,并且this的指向是window
//如果用了new,就会创建一个新的对象,并且将对象给到t1.
var t1 =new Teacher()
console.log(t1)

4、ES6的class写法(最常用)

//语法糖,ES6新增的语法。2015的新标准。es6 ==> EcmaScript 2015,2015发布的JavaScript的标准。
  class Cat{
   constructor(){
    this.name = "波斯猫"
   }
   run(){
    console.log("会跑")
   }
   say(){
    console.log("喵喵喵")
   }
                var c1 = new Cat()
		console.log(c1)

还可以用到继承extends

class cxk{
   rap(){
    console.log("鸡你太美")
   }
  }
class Cat extends cxk{
			constructor(){
				super()//super这个关键词,是调用继承的class的构造函数
				this.name = "波斯猫"
			}
			run(){
				console.log("会跑")
			}
			say(){
				console.log("喵喵喵")
			}
		}
		
		var c1 = new Cat()
		console.log(c1)

cat继承了cxk,所以创建对象后也可以调用cxk的方法了。记得用上constructor(){}

DOM对象

DOM对象,就是HTML页面文档的对象。整个页面的显示,都由document对象文档构成。文档对象又由许多的元素对象构成。文档对象里面就有许多属性和方法来操控页面的显示,以及事件的处理。所有元素的对象最终组成庞大的dom树。

ES5以前查找元素的方式已经不方便,也不怎么用了。
//ES5以前查找元素的方式
//通过ID查找元素对象
var d1 = document.getElementById("d1")
console.log(d1)
//通过class查找元素对象
var abc = document.getElementsByClassName('abc')
console.log(abc)
//通过标签名称查找元素对象
var div = document.getElementsByTagName("div")
console.log(div)

ES5以后的查找方式才是现在常用且方便的方式了

var div1 =  document.querySelector("div")
console.log(div1)
var id1 = document.querySelector("#d1")
console.log(id1)
var abc1 = document.querySelector('body .abc')
console.log(abc1)
 
//选择多个元素,document.querySelectorAll()
var abc2 = document.querySelectorAll("#d1")
console.log(abc2)
 
 
for(var i =0 ;i<abc2.length;i++){
 abc2[i].innerHTML +=i
 abc2[i].style.background="green"
}

通过DOM对象来设置DOM对象里的HTML

1、设置样式

里面的样式如background-color中,都去掉-,然后用首字母大写来拼接一个单词,像Java中的驼峰命名法。

h1.style.backgroundColor = "skyblue"

2、修改dom的样式

通过创建style的对象,在里面写好相应的样式。不过这种也是不怎么常用。。

//创建元素
var s1 = document.createElement("style")
//设置s1的innerHTML的内容
s1.innerHTML = 'h1{color: red;}';
//将style元素插入到HTML页面的body里
document.body.appendChild(s1)

3、设置dom对象的类名

这种为常用的方式,比如说我们将一个div里的图片通过鼠标的点击进行隐藏或者显示的操作。

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title></title>
  
  <style type="text/css">
   .list{
    width: 400px;
    position: absolute;
    left: -400px;
    top: 0; 
    transition: all 2s;
    
   }
   .listOut{
    width: 400px;
    position: absolute;
    left: 0px;
    top: 0;
    transition: all 2s;
   }
   .list img{
    width: 400px;
   }
   .btn{
    position: absolute;
    left: 20px;
    top: 20px;
    z-index: 1;
   }
  </style>
 </head>
 <body>
  <div class="main">
   <div class="btn">切换</div>
   <div class="list">
    <img src="img/timg.jfif"/>
   </div>
  </div>
  
  
  <script type="text/javascript">
   var btn = document.querySelector('.btn')
   var list = document.querySelector('.list')
   btn.onclick = function(){
    console.log(list.className)
    if(list.className == "list"){
     list.className = "listOut"
    }else{
     list.className = "list"
    }
 
   }
  </script>
 </body>
</html>

事件

1、on事件

这种方式写起来方便简单,但是只能调用一个函数,只有冒泡事件。

var h1 = document.querySelector('h1')
h1.onclick = function(){
  h1.style.backgroundColor = "deeppink"
  }

2、AddEventlistener

这种方式可以在同一个事件中调用多个函数,这种模式下可以设置事件是冒泡或者是捕获。

h1.addEventListener(事件的名称,事件调用起的函数,true/false(捕获/冒泡))

冒泡事件和捕获事件的区别

冒泡事件由子元素一层一层向上触发,知道HTML元素,那么这种事件就是冒泡事件。一般情况下就使用冒泡,使用AddEventlistener不写最后一个参数,就默认为false,即为冒泡事件。

捕获事件则从HTML开始一层一层向下触发,直到最小的子元素,这种事件模式为捕获。

其他事件

点击事件:

1、单击事件 onclick

var h1 = document.querySelector('h1')
			
			//单击事件
			h1.onclick = function(event){
				console.log(event)
				h1.style.background = "skyblue"
			}

2、双击事件 ondbclick

h1.ondblclick = function(event){
				console.log(event)
				h1.style.background = "pink"
			}

鼠标事件

1、鼠标移入 onmouseenter

var h1 = document.querySelector('h1')
			//鼠标移入某个元素
			h1.onmouseenter = function(event){
				console.log(event)
				h1.style.background = "green"
			}

这里event可以在浏览器中获取到鼠标移入时的信息,比如坐标等等。

2、鼠标移出 onmouserleave

h1.onmouseleave = function(event){
				console.log(event)
				h1.style.background = "purple"
			}

3、鼠标悬浮 onmouseover

h1.onmouseover = function(){
				console.log("onmouseover")
			}

按键事件

1、按键按下 onkeydown

var input1 = document.querySelector('#input')
			/*//键盘按下事件
			input1.onkeydown = function(event){
				console.log(event)
			}

2、按键弹起 onkeyup

input1.onkeyup = function(event){
				console.log(event)
			}

3、按键press

input1.onkeypress = function(event){
				console.log(event)
			}

通过查看event记录的事件,可以看到在浏览器中输入信息时,按下的是键盘的什么键位。

另外还有手指的触屏事件,聚焦事件,文档的加载事件,这里就不一一列举啦!

感谢各位客官的浏览!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值