js

数组

            // 定义一个数组
var ay1 = new Array(10);
// 获取数组的长度
console.log(ay1.length);
// 创建一个数组并赋值
var ay2 = new Array(1,2,6,9);
console.log(ay2.length);
console.log(ay2[2])
// 对ay1数组中下标为0的元素进行赋值
ay1[0]=1;
// 通过下标去数组中下标为0的元素的值
console.log(ay1[0])
// push方法,返回值是数字的长度
console.log(ay2.push(1))
console.log(ay2[4])
// length可读可写,返回值是数字的长度
ay1.length=100;
console.log(ay1.length)

// splice可以将原数组中的元素替换
// 参数1:要替换的元素起始下标
// 参数2:从该元素开始替换几个元素
// 参数3:替换后的内容
ay2.splice(2,1,"tom");
// 数组遍历 i为下标 in后指代需要遍历的数组
for(var i in ay2){
console.log(ay2[i])
}
// 元素拼接并返回
console.log(ay2.join("."))

 

 

创建json对象

            // 创建json对象,以键值对的方式存储数据 
// 通常将key设置为字符串,value值设置为object
var json1={"name":"tom","birth":new Date(),"sex":"男"};
// json取值操作
// 1、直接用对象.key值取值
console.log(json1.name)
// 2、使用对象["key"]取值
console.log(json1["birthday"])
// json赋值
// 使用json对象["key"]赋值,若键存在,更改为原value
// 若键不存在,创建一个新的key-value存入对象中

json1["age"]=26
console.log(json1.name)
console.log(json1.age)

 

json除了可以当作一种类似“映射map”的对象使用之外,也是常用于组织pojo的方式之一

 

            // json遍历
// json键值对存在顺序固定,并且稳定,可以将key值看成是一种索引
for(var k in json1){
console.log(json1[k])
}
// json的value可以是普通数值、字符串、对象、或者json以及json数组
var student={
"stid":23,
"stuname":"ww",
"getStid":function(){
return this.stid
},
"stusubject":{
"subid":1,
"subname":"java"
},

};
// 取值
console.log(student["stusubject"]["subname"])
console.log(student.getStid())

 

 

 

function

可以命名并复用的js代码块

function对象拥有js环境最高编译优先级

function也是js引用(变量)的生命周期以及作用域

 

 

 

 

内置对象

document对象

可以理解为整个html页面上所有元素的集合或管理者

每个页面上的js环境中都会内置一个document对象作为当前页面的管理者

拿过来直接用,管理页面上的元素

常用方法

write

向页面输出,符合语法的输出视图,不符合语法的原文输出

document.write("<button id='bt7' class='bts'>ok7</button>")

 

返回页面上的链接数,包括map中的链接

console.log(document.links)

 

 

页面上定位元素的常用方法:

 

 

鼠标事件

onclick:单击

ondblclick:双击

onmousedown:鼠标被按下时出发

onmouseup:释放鼠标时触发

onmouseover:当鼠标经过元素时触发

onmouseout:当鼠标离开元素时触发

onmousemove:当鼠标移动时触发

onchange:当元素值发生改变时触发,下拉菜单使用较多

onblur:当失去焦点时触发

onfocus:获取焦点时触发

onscroll:当滑动滚轮时触发

onload:元素加载完毕之后触发

document.body.onload=function(){
alert(1)
}

当页面所有元素加载完毕之后触发事件

保证页面加载完成后展开操作,并且可避免外接js对当前页面同名引用或同名function设计造成冲突

 

 

事件流

☞相关元素在触发相同或相似事件时,事件的监听器(function)所执行的顺序,以及对这种顺序进行控制的设计行为(如执行顺序,阻塞传播等)

事件流的执行顺序

冒泡

由子节点向父节点进行事件传播,是系统的默认方式

 

捕获

由父节点向子节点进行事件传播,可根据西药用dom2级事件添加设置

 

dom0级只能使用冒泡方式

 

设置监听时的三个参数

type:事件类型

listener:function

 

 

 

            // dom0级事件添加,只能使用冒泡方式进行事件流顺序
dv1.onclick=function(){
alert("dv1")
}
dv2.onclick=function(event){
alert("dv2")
event.stopPropagation()
}

// dom2级事件添加,可以控制事件流顺序,为捕获方式传播
// 设置捕获传播时,将父节点的事件添加第三个参数为true即可将事件流顺序调整为捕获
// 可以通过stopPropagation属性控制组织事件流传播
// 冒泡方式在子元素内部进行设置
// 捕获方式在父元素内部进行设置

dv1.addEventListener("click",function(event){
alert("dv1")

},)
dv2.addEventListener("click",function(){
alert("dv2")
event.stopPropagation()
})

 

 

var sayBye=function?(){


}

此种方法也可以声明function,但本质上只是一种赋值行为,不过赋的值是一个function,不具备function的最高优先级

 

节点编程(dom节点控制、dom节点编程)

dom编程

使用js针对dom上下文(页面环境)中的节点进行相关的定位、添加、嗯行、删除等操作

dom上下文可以简单理解为document对象管理的整个页面环境,包括“html元素、js引用等

 

dom节点

在原生的js环境中分为

  1. tag标记节点

  2. attribute属性节点

  3. text文本节点

 

元素定位

指定元素节点的父节点、子节点、相邻节点(兄弟节点)

 

 

// 通过id定位元素
var dv2=document.getElementById("dv2")
// 定位父节点
var pn=dv2.parentNode;
console.log(pn)
// 定位父元素
var pe=dv2.parentElement;
console.log(pe)
// 定位子节点
var cn=dv2.childNodes;
console.log(cn)
// 定位子元素
var dv_ce=dv2.children;
console.log(dv_ce)
// 定位下一个节点
var ns=dv2.nextElementSibling;
console.log(ns)
// 定位下一个元素
var nel=dv2.previousSibling;
console.log(ps)
// 定位上一个节点
var ps=dv2.previousSibling;
console.log(ps)
// 定位上一个元素
var pel=dv2.previousElementSibling
console.log(pel)

 

添加节点

  1. 由document创建指定的标记节点

  2. 根据需要为节点属性赋值

  3. 定位新节点所处位置的父节点

  4. 由父节点添加新节点

		// 1. 由document创建指定的标记节点
var ipt1=document.createElement("input");
// 2. 根据需要为节点属性赋值
ipt1.type="text";
// 3. 定位新节点所处位置的父节点
var dv5=document.getElementById("dv5");
// 4. 由父节点添加新节点
dv5.appendChild(ipt1);

 

还可以通过其他方式设置属性

		// 设置属性
ipt1.setAttribute("type","radio");
// 获取属性
console.log(ipt1.getAttribute("type"));

 

set、get属性设置时,兼容性最好

使用.进行属性操作时,类似自定义属性无法获取

 

向标记中添加文本

1.固定嵌套关系

2.不能单独使用

满足上述两个条件可以使用text属性为文本赋值

var star=document.createElement("option");
var stars=document.getElementByld("stars");
star.text="天秤座";
stars.appendChild(star);

 

可以独立使用的双标记可以使用innerHTML属性为文本赋值

star.innerHTML="狮子座";

 

但由于每个浏览器客户端兼容器不同,建议两个都写

 

删除节点

		1.由document锁定要删除的节点
var bt1=document.getElementById("bt1");
2.定位此节点的父节点
var dv5=document.getElementById("dv5");
3.由父节点调用方法删除节点
dv5.removeChild(bt1);
// 或者直接通过元素定位父节点后移除
bt1.parentElement.removeChild(bt1);

 

 

更新节点

        // 1.由document锁定要改变的节点
var bt1=document.getElementById("bt1");
// 2.document创建新节点(要去掉所有节点的新节点)
var ipt.document.createElementById("input");
ipt.setAttribute("type","text");
// 3.定位此节点的父节点
var dv5=document.getElementById("dv5";)
// 4.由父节点调用犯法用新节点取代旧节点
dv5.replaceChild("ipt,bt1");

 

 

 

innerHTML

var dv5=document.getElementById("dv5");
// 在原有基础上增加内容
dv5.innerHTML+="<input type='radio' checked='checked'>男"
// 对内部元素清除
dv5.innerHTML="";

 

 

outerHTML

var bt1=document.getElementById("bt1");
// 对元素本身进行操作
bt1.outerHTML="<input type='radio' checked='checked'>男";
//清空,包括标记本身
bt1.outerHTML="";

 

 

元素的尺寸和定位

使用想要获取元素的尺寸(height、width)通过例如

dv1.style.height

前提是必须设置过该属性,该元素的内接样式(style属性进行设置的),才能正常获取 元素在css央视表中设置的元素的样式,需要通过其他方式进行获取

clientWidth

可以获取元素在客户端浏览器dom节点中所占的实际宽度(元素本身width+padding)尺寸,默认单位xp

clientHeight

可以获取元素在客户端浏览器dom节点中所占的实际高度(元素本身height+padding)尺寸,默认单位xp

offsetWidth

: border+clientWidth

offsetHeight

: border+clientHeight

offsetLeft

元素距离定位父节点左边距

offsetTop

元素距离定位父节点上边距

 

事件监控

pageX

事件触发时,鼠标相对于页面显示区左侧的距离,包括和滚动隐藏部分

pageY

事件触发时,鼠标相对于页面显示区上侧的距离,包括和滚动隐藏部分

clientX

事件触发时,鼠标相对于页面显示区左侧的距离,不包括和滚动隐藏部分

clientY

事件触发时,鼠标相对于页面显示区上侧的距离,不包括和滚动隐藏部分

offsetX

事件触发时,鼠标距离事件源左侧的距离

offsetY

事件触发时,鼠标距离事件源上侧的距离

 

var dv1=document.getElemrntByld("dv1");
//console.log(dv1.style.height)
console.log("clientHeight:"+dv1.clientHeight)
console.log("clientWidth:"+dv1.clientWidth)
console.log("offsetHeight:"+dv1.offsetHeight)
console.log("offsetWidth:"+dv1.offsetWidth)
console.log("offsetLeft:"+dv1.offsetLeft)
console.log("offsetTop:"+dv1.offsetTop)
dv1.onclick=function(e){
console.log("pageX:"+e.pageX)
console.log("pageY:"+e.pageY)
console.log("clientX:"+e.clientX)
console.log("clientY:"+e.clientY)
console.log("offsetX:"+e.offsetX)
console.log("offsetY:"+e.offsetY)
}

 

拖拽案例

var dv1=document.getElementById("dv1");
// 设置鼠标按下事件
dv1.onmousedown=function(e){
// 页面移动
document.onmousemove=function(evt){
// 设置鼠标按下时鼠标央视由默认改为小手
dv1.style.cursor="pointer";
// 元素距离左侧的距离为鼠标距离左侧边距-鼠标距离事件源左侧的距离
dv1.style.left=evt.pageX-e.offsetX+"px";
dv1.style.top=evt.pageY-e.offsetY+"px";

}

}
// 当鼠标抬起时
dv1.onmouseup=function(ev2){
// 页面移动事件清空
document.onmousemove=null;
// 鼠标央视改回默认
dv1.style.cursor="default";
}

 

window对象

document时window的一部分 是显示区

window:包括地址栏、关闭钮、边框、显示区、滚动条

window.setInterval、setTimeout:可以模拟线程操作

setInterval:定时器操作 每隔...执行一次

window.setInterval(function(){
document.write(new Date())
},1000)

 

setTimeout:预设值操作 每隔...执行一次

window.setTimeout(function(){
document.write(new Date())
},1000)

 

 

var si=window.setTimeout(function(){
// document.write(new Date())
document.getElementById("dv1").innerHTML=new Date();
},1000)
// window.clearTimeout(si);

 

 

function sayHi(){
document.getElementById("dv1").innerHTML=new Date();
window.setTimeout(function(){
sayHi();
},1000)
}

sayHi();

采用类似于定时执行一次的递归方式,实现规定效果

posted @ 2021-08-13 17:20  白羊白羊咚  阅读(91)  评论(0)    收藏  举报