js基础(2)~元素增删,属性,节点,定时器,date,事件,模块

1,DOM节点

DOM(document object model)文档对象模型。
Dom结构(dom树):浏览器在打开一个html页面之后,会针对当前打开的html页面中的所有标签进行渲染,把每一个标签都解析成一个对象,这些对象以树形的结构关联在一起,这种结构就是dom结构,也就是所谓的dom树。这些标签在解析之后会被存入到document中,document是页面主体标签的一个对象集合,叫做文档对象模型。

一切关于页面对象的操作,都需要经过document来访问,把标签以及样式通过dom转换成了对象或者是方法,js中不能直接操作html标签。

  1. document代表当前页面的对象。getElementById:根据id来查找元素。查找到之后会以对象的形式返回。
 var obj =document.getElementById("title");
    console.log(obj)
  1. getElementsByTagName:根据标签名查找符合的所有元素。返回一个列表。

列表不是真正的数组,但是可以像数组一样使用索引对元素进行访问,也可以使用长度。

var p1 =document.getElementsByTagName("p");
  1. getElementsByClassName:根据class样式查找符合的元素,返回一个列表。
var lines =document.getElementsByClassName("line");
  1. querySelector:根据样式选择器来查找某个元素。返回的是查询到的页面元素对象。
var hello =document.querySelector("#title");
  1. querySelectorAll:根据样式选择器来查找所有满足条件的元素,返回列表。
var linqwe=document.querySelectorAll(".line")
  1. textContent与innerHTML的区别

textContent单一的显示文本,不去管文本内容,
innerHTML在设置内容的时候,会把内容中的标签解析为元素显示出来。

2,元素操作

2.1,元素的添加和删除

  1. createElement:创建标签,参数是标签名称。
var h1 =document.createElement("h1");
//给标签添加内容
h1.textContent ="这是通过js语法创建的h1标签";
  1. appendChild:添加子元素。
/*
    document.body代表body对象。
   下面代码的意思:把一个名为h1的标签添加到body对象中。
*/
document.body.appendChild(h1);
  1. insertBefore:将一个标签作为子元素插入到另一个标签中。
/*
   insertBefore,2个参数:
   1参是要插入的元素对象,
   2参是插入到哪个元素之前。
*/
document.body.insertBefore(h2,firstTitle);

//parentElement:表示本元素的父元素对象.
console.log(firstTitle.parentElement);
  1. 删除子元素
document.body.removeChild(firstTitle);

2.2,js中访问元素的尺寸和位置

如果元素的样式是通过css设置的,那么不能通过style属性来获取。

  1. 获取到元素展示的时候的宽高(包含边框)
console.log(box.offsetWidth);
    console.log(box.offsetHeight);
  1. 不含边框的宽高
console.log(box.clientWidth);
    console.log(box.clientHeight);
  1. 获取元素相对于离自己最近的position(必须是非static)。left:父元素的横坐标。top:纵坐标。
console.log(box.offsetLeft);
console.log(box.offsetTop);
  1. 到内容区域的距离
console.log(box.clientLeft);
    console.log(box.clientTop);
  1. 获取浏览器工作区域的宽高
console.log(window.innerWidth);
   console.log(window.innerHeight);
  1. 获取浏览器窗口的宽高
console.log(window.outerWidth);
  console.log(window.outerHeight);

3,元素属性

HTML标签属性可以分为2种;
html标准属性:在html语法中能够直接被浏览器识别,有专门用途。
自定义属性:标准属性之外的都叫做自定义属性,满足个性化。
基本所有的html属性都可以使用对象.属性的形式访问,属性也支持读和写。

var h1 =document.getElementById("name");
console.log(h1.title);属性读
h1.title ="不忘初心!";属性写

3.1,标准属性标准属性标准属性标准属性标准属性

1,每一个元素对象都有一个完整的style层叠样式表。
元素的style属性代表该元素的样式表。当为元素的标签设置style属性之后,实际上是把字符串(red)解析成了一个对象,然后再赋值。

       h1.style.color ="red";
	//上面的那个=下面的这个
	 h1.style="color:red"

2,标准的class属性可以设置多个值,因为class本身就是一个列表。

className:添加样式名称
p1.className ="green bold";

3,class样式增删改查

//删除,有则删除:remove
p1.classList.remove("bold");
//添加:add
p1.classList.add("bold");
//切换,有则删,无则添:toggle
p1.classList.toggle("bold");
//判断某些样式是否存在:contains
console.log(p1.classList.contains("bold"));

3.2,自定义属性

  1. getAttribute:可以获取自定义属性和标准属性。
var v1 =p1.getAttribute("dalong");  
  1. setAttribute:可以添加自定义属性和标准属性。
/*
  setAttribute,两个参数:1参是属性名,2参属性值
*/
p1.setAttribute("state","ready");
  1. 判断是否有自定义属性
console.log(p1.hasAttribute("state"));
  1. 删除自定义属性
 p1.removeAttribute("state");

对于标签对象,访问的对象属性,标准属性和对象属性的访问方式一样的(people.name与p1.title);如果是非标准属性,访问的就是对象的属性而不是标签的属性了。

4, 节点

4.1,属性类型节点

1,attributes:查找某个元素节点上所有的属性,返回一个属性列表。

//(每一个属性都可以理解为是一个小的数据)
var attList =a.attributes;

2,修改或者添加属性节点

//属性有就代表修改
a.setAttribute("target","_self");

//属性无则代表添加
a.setAttribute("title","百度一下,你就知道");

3,删除属性节点

a.removeAttribute("href");

4,对于class属性的修改,有专门的样式表,提供了增删改查。

a.classList.add("bgy");// 删除
a.classList.remove("kaiti");
// 替换
 a.classList.toggle("red");

5,对于style属性的修改,直接修改元素节点就可以

a.style.marginLeft ="100px";

4.2,文本类型节点

1,childNodes表示本节点所有的子节点,类型是一个nodeList。

var list =ul.childNodes;

2,N
nod:表示单一的节点

 var nod =list[i];

3,元素中的标签和文本(包括空格和换行)都属于元素的子节点。

//nodeType表示节点类型:1.为元素 2.属性 3.文本。
console.log(nod.nodeType);

4,文本节点属于叶子节点,往下没有子节点了。

5,定时器

定时器分2种:1.延迟定时器(setTimeout),2.重复定时器(setInterval)。

5.1,延迟定时器

延迟定时器:可以延迟某个时间之后再调用该函数。

/*
  参数:1参是要调用的函数,2参是时间。
  以毫秒为单位,1m =1000mm。
  格式:timer是定时器编号。
*/
var timer = setTimeout(function(){
        console.log("4秒时间到");
},4000);

删除定时器:根据定时器编号删除

 function cancelTimer(){
        clearTimeout(timer);
          // 清除掉内存
        timer =null;
        // 清空重复定时器的
        clearInterval(timer2);
        timer2 =null;
    }

5.2,重复定时器

重复定时器:会在填入的时间内,按照时间,间隔重复执行。

//也会返回一个定时器编号
 var timer2 =setInterval(function(){
        console.log("我变帅了"); 
},1000);

6,日期类

1,创建系统提供的日期类(Date)

var now =new Date();

2,getTime():返回自1970年7月1日起至今的毫秒数。

 console.log(now.getTime());
 //返回自传入的时间到1970的毫秒数
console.log(now.setFullYear(2018,10,16));

3,年月日

	var year =now.getFullYear();//拿到当前的年份
	var month =now.getMonth();//拿到当前的月份 
	var date =now.getDate(); //拿到当前是几号
    var day =now.getDay(); //拿到当前是星期几

4,时分秒

	var hour =now.getHours();//拿到小时 0(午夜) ~~23
    var minute =now.getMinutes();//分钟 返回值是0~~59 
    var second =now.getSeconds();//秒数 返回值是0~~59

5,三目运算符(条件运算符)
格式:条件?结果1:结果2。
如果满足条件,会执行结果1,否则执行结果2。

//在传参时值不固定时使用。
console.log(age<20?"未成年":"成年");

//嵌套使用
console.log(salary<3000?"贫困户":salary<6000?"正常":"小康");

7,事件

7.1,事件基础

通过html标签的属性进行事件绑定。

/* 
   onclick:点击事件,当点击按钮的时候事件会触发,
   zanClick(event):当事件激活的时候要去执行的函数的名称和参数,
   onclick:属性名称 zanClick是属性值 可以使用全局作用域的函数。
*/
    <button onclick="zanClick(event)" 

在js中为元素绑定事件

var btn =document.getElementById("btn");
    // 因为onclick是个标准属性所以可以直接调用
    btn.onclick =function(e){
        console.log("这是通过js来执行的事件:"+e);
    }

7.2,鼠标事件

1,onmousedown:鼠标按下时触发

box.onmousedown =function(e){
        console.log("鼠标按下去了!!!");
    }

2,onmouseup:鼠标松开

 box.onmouseup =function(e){
        console.log("鼠标松开了!!!");
    }

3,nmouseenter:鼠标指针进入时触发

box.onmouseenter =function(e){
        console.log("鼠标指针进入了!!!");
    }

4,onmouseleave:鼠标离开时触发

box.onmouseleave =function(e){
        console.log("鼠标离开了!!!");
    }

5,onmousemove:鼠标指针移动,频繁触发

box.onmousemove =function(e){
        console.log("鼠标指针移动,频发!!!");
    }

7.3,键盘事件

1,onkeydown:键盘按下时触发

document.body.onkeydown =function(e){
        //   e.key代表键盘按键上面的值,系统通过捕捉按键,
        // 来拿到按键的值
          console.log(e.key);
        //   按键的编码
          console.log(e.keyCode);
    }

2,按键弹起时:onkeyup

 document.body.onkeyup =function(e){
        console.log(e.key);
    }

3,正在点击时触发:onkeypress

document.body.onkeypress =function(e)
    {// 正在点击按键的时候触发
        console.log(e.key);
    }

7.4,元素的滚动事件

1,onscroll:滚动监听事件,当元素发生内容滚动时,事件触发。

page.onscroll =function(e){
   // e.target >>>当前事件的所属对象
   // 获取当前元素本身的高度
   console.log("元素本身:"+e.target.clientHeight);
   // 元素内容高度
   console.log("滚动内容:"+e.target.scrollHeight);
   //  纵向偏移量
   console.log("元素的纵向偏移:"+e.target.scrollTop);
   // 判断内容是否到底
   if (e.target.scrollTop ==
       e.target.scrollHeight - e.target.clientHeight) {
       console.log("拖到了底部");
   }
}
  1. scroll事件
    scrollTop属性,表示元素的纵向滚动偏移量。
// console.log(e.target.scrollTop);
clientHeight,元素本身的高度(不带边框)
// console.log(e.target.clientHeight);
scrollHeight,元素内容的高度
console.log(e.target.scrollHeight);

//最大滚动偏移量=元素内容高度-元素自身高度。

7.5,事件的传播过程

子元素的事件触发会带动父元素的事件触发。
事件传播分为两个:

从上到下的捕获过程,
从下到上的冒泡过程

1,addEventListener:添加监听,3个参数

1参:代表监听事件的类型
2参:代表监听事件的函数,监听成功后调用
3参:一个布尔值,代表事件在XX阶段触发。默认是flase表示在冒泡阶段触发,true代表该事件在捕获阶段触发。

newBtn.addEventListener("click",f1,true);

2,removeEventListener:删除事件。如果事件在捕获阶段进行监听的,是无法删除的。
一些特殊的事件是无法阻止的,例如a标签的跳转。

newBtn.removeEventListener("click",f1);

8,js模块

8.1,http模块

http模块的作用:创建http服务。

  1. createServer:创建基于http协议的服务器,
    request:请求(req):里面包含有此次请求的内容,
    response:响应(res):里面包含有此次响应的内容
var app =http.createServer(function(req,res){}
  1. res.end:向响应体内插入数据,把数据返回给客户端,并结束此次请求。默认返回是html格式 可以直接返回现成的网页,也可以嵌入标签。
res.end("<h1>欢迎来到我的csdn,谢谢阅读!!!</h1>");
  1. listen:服务器起动
    端口号;8080,3000
//成功之后的回调
app.listen(8080,function(err){
console.log("run is now");
});

8.1.1,请求报文和响应报文

http要求只有客户端主动请求服务器,服务器才能做出响应,
一次完整的http请求:
1,客户端按照请求报文格式把请求数据发给服务器,
2,然后服务器按照响应报文格式返回给客户端数据。
在这个过程中,客户端执行的数据叫请求报文,服务端返回的数据叫响应报文。
请求报文

  1. 请求行:单独的一行,其中规定了请求方法,资源路径,协议名称/协议版本,
  2. 请求头:多行数据,其中可以记录请求的路径,请求的cookie,浏览器信息,请求体长度,
  3. 空行:单独的一行,没有任何数据,作用是用来分隔请求头和请求体,
  4. 请求体:多行数据,内容是本次请求的数据。

响应报文

  1. 响应行:单行的数据,本次请求的状态码,请求结果:
    A,1开头表示正在拨,
    B,2开头表示连接成功,
    C,4表示客户端出现错误404,url拼错,
    D,5表示服务端错误,502表示服务器瘫痪了,
  2. 响应头:多行数据 包含服务器信息,本次请求体的长度,本次请求体的数据类型,cookie等
  3. 空行:和请求报文空行一样。
  4. 响应数据:本次请求返回的数据一般都是json或者是xml格式。

8.2,fs(文件)模块

8.2.1,fs.writeFileSync方法

fs.writeFileSync:同步写入,用于把一段文本写入到一个文件中。

1参:文件路径,
2参:当前写入的文本,文件存在则会被覆盖掉,如果不存在就创建并写入。

//导入模块
var fs = require("fs");

fs.writeFileSync("./one.txt","ok");
// fs.writeFileSync()同步
// fs.writeFileAsync()异步

8.2.2,fs.writeFile

fs.writeFile:写入文件

1参:文件路径,
2参:写入的内容,
3参:写入结束的回调函数,
回调函数有一个参数,如果任务完成,则为空,如果任务失败,则会返回失败原因。

fs.writeFile("./123.txt","今天晚上下雨了",function(error){
   console.log(err)
}

8.2.3,fs.readFileSync

fs.readFileSync:同步读取。

fs中的方法,都分为两个版本的,同步版和异步版(sync)。
fs.readFileSync:同步版的读取文件方法,参数是要读取的文件的路径。返回值就是读取到的内容。

var content = fs.readFileSync("./123.txt");

/*
  读取到的内容不是字符串,而是原始数据, 类型是buffer,可以调用buffer对象的toString()方法转为字符串。
*/
content.toString()

8.2.4,fs.readFile

fs.readFile:异步读取。

1参:读取的文件路径,
2参:文件读取结束后的回调函数。回调函数有两个参数:
1参:错误信息,如果没错则为空,
2参:读取到的内容。

fs.readFile("./123.txt",function(err,data){
	if (err) {
		console.log(err);
	} else {
		console.log(data.toString());
	}
});

8.2.5,fs.mkdir

fs.mkdir:制作文件夹。

1参:创建的文件夹的路径,
2参:创建之后的回调函数。

fs.mkdir("./abc",function(err){}

8.2.6,fs.copyFile

fs.copyFile:复制文件。

1参,需要复制的文件,
2,复制到哪里去,
3,复制完毕之后回调的函数,

fs.copyFile("./123.txt","./abc/456.txt",function(err){}

//fs.unlink:文件删除。
fs.unlink("./abc/456.txt",function(err){}

8.3,同步与异步

同步:代码占用主线程,是阻塞的状态,直到任务结束之后才会打开线程。
异步:分线程:任务是在后台执行,不会阻塞当前代码,当前代码立刻可以执行,所以异步函数一般都会有一个回调的函数,当异步功能完毕之后回到主线程。
文件操作为什么会有异步?
文件操作在写入的时候,耗时不确定,磁盘的写入速度,文件的大小等等都会影响到文件写入速度,如果使用同步容易造成堵塞,反映到程序上来说,会出现卡顿,在使用的时候尽量使用异步函数。定时器也是一个异步函数。

8.4,path模块

path模块:设置路径。
绝对路径:有完整的路径,以盘符开头
相对路径:不完整的路径,只记录路径结尾部分,忽略层级关系

8.4.1,path.join

path.join方法:将2个路径合并一个。

// ./代表当前目录 ../表示上层目录
// __dirname:表示当前文件所在的绝对路径

let p3 =path.join(p1,p2);

8.4.2,path.resolve

path.resolve:把文件的相对路径转成绝对路径。

console.log(path.resolve(p4));

//path.extname:获得当前文件的扩展名
console.log(path.extname(p4));

//path.basename:获得当前文件的文件名
console.log(path.basename(p4));

8.5,url模块

url模块:统一资源定位符。

url组成:
1,协议名:http,ftp,udp,mail,
2,域名或ip:com(顶级商业域名),cn(国家域名),edu(教育域名)。ip:127.0.0.1(本机ip),
3,端口号:8080,8088.3306,7215,
4,路径:相对路径和绝对路径,
5,参数:name,id,psw
6,哈希值

http://www.baidu.com:80/music/asd/asdf?name=sun&age=3#3333

http:// 协议名
www.baidu.com 域名
:80 端口号
/music/asd/asdf 路径
?name=sun&age=3 参数
#3333 哈希值

url也分绝对地址和相对地址
url模块可以把一个url路径转换成一个url对象
var userObj =url.parse(urlStr);

8.6,模块化

定义:把一个庞大的功能拆分成若干个小的功能,每个功能是一个独立的模块,使用的时候导入。
好处:提高代码的复用。
导出的数据可以是任意类型,导出的数据是什么类型,导入的时候就是对应的类型。
module.exports只能导出一套数据,如果文件里面有多个数据,可以把这些数据封装成为一个大的对象,

module.exports ={num,str,arr,obj,js2Str}

9,网络基础

9.1,get与post的区别

get没有请求体,请求的数据直接追加到url后面,post有请求体,请求的数据和url分开,
GET请求的数据会暴露在地址栏中,而POST请求则不会。
在使用GET请求时,传输数据会受到URL长度的限制。
POST的安全性比GET的高。

9.2,JSON解析

,9.2.1,JSON.stringify

stringify:把对象转换成字符串。

var jsonStr =JSON.stringify(objArr);

9.2.2,JSON.parse

parse:把字符串转化成对象。

var objArr2 =JSON.parse(data.toString());

10,cookie

10.1,set方法

set方法:用来设置响应内容。

Set-cookie设置响应头,设置了cookie之后可以让浏览器帮助服务端存储一定的数据。
当浏览器收到cookie之后下一次启动服务器的时候会自动把cookie附带到本次的请求头中。
cookie的内容只能是字符串,如果想存储多个键值对的话,会比较麻烦,而且要按照cookie的标准格式去进行存储。

导入cookie包
var cookie =require('cookie');

res.set('Set-cookie','name=xia,age=30'); 

10.2,cookie方法用于设置响应头,

cookie方法:用于设置响应头,

1参:cookie的名字,名字重复代表更新cookie,
2参:cookie的值,
3参:cookie需要配置的对象,可以配置有效期,或者路径。

res.cookie('name','King',{
// 有效期 毫秒
maxAge:86400
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒鼎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值