首页 > js 的学习

js 的学习

day41

学习链接:https://www.cnblogs.com/yuanchenqi/articles/5980312.html

知识结构:

  BOM对象

  DOM对象(DHTML)

 

一个完整的JavaScript的组成有以下三个不同部分组成:

1、ECMAScipt(语法规范)

2、文档对象模型(DOM) Document object model (整合js,css,html)

3、浏览器对象模型(BOM) Broswer object model(整合js和浏览器)

  • Javascript 在开发中绝大多数情况是基于对象的.也是面向对象的. 

         

简单地说,ECMAScript 描述了以下内容:

  • 语法 
  • 类型 
  • 语句 
  • 关键字 
  • 保留字 
  • 运算符 
  • 对象 (封装 继承 多态) 基于对象的语言.使用对象.

JavaScript的导入方式:

{ #1 直接在body或者head内编写(看个人习惯,个人习惯放在body内)#}

    

  

swith 选择控制语句:

switch基本格式
switch (表达式) {case 值1:语句1;break;case 值2:语句2;break;case 值3:语句3;break;default:语句4;
}

  

eg:

var week='Monday';
switch (week) {case "Monday":alert('星期一');break;case "Tuesday":alert('星期二');break;case "Wednesday":alert('星期三');break;default:alert('byebye');
}



default 是在都不满足的时候,执行该语句

switchelse if结构更加简洁清晰,使程序可读性更强,效率更高。

 

首先要看一个问题,if 语句适用范围比较广,只要是 boolean 表达式都可以用 if 判断;而 switch 只能对基本类型进行数值比较。两者的可比性就仅限在两个基本类型比较的范围内。
说到基本类型的数值比较,那当然要有两个数。然后重点来了——
if 语句每一句都是独立的,看下面的语句:
if (a == 1) ...
else if (a == 2) ...
这样 a 要被读入寄存器两次,1 和 2 分别被读入寄存器一次。于是你是否发现其实 a 读两次是有点多余的,在你全部比较完之前只需要一次读入寄存器就行了,其余都是额外开销。但是 if 语句必须每次都把里面的两个数从内存拿出来读到寄存器,它不知道你其实比较的是同一个 a。
于是 switch case 就出来了,把上面的改成 switch case 版本:
switch (a) {case 0:break;case 1:
}总结:1.switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化
2.switch-case只将表达式计算一次,然后将表达式的值与每个case的值比较,进而选择执行哪一个case的语句块
3.if..else 的判断条件范围较广,每条语句基本上独立的,每次判断时都要条件加载一次。
所以在多路分支时用switch比if..else if .. else结构要效率高。 

for  循环控制语句******:

for循环基本格式
for (初始化;条件;增量){语句1;...
}
功能说明
实现条件循环,当条件成立时,执行语句1,否则跳出循环体

 eg:

    for (i=0;i<=10;i++){document.write("hello world"+i+"
")}

  



Title

hello

world

bigbao

nihao

  

 While 循环控制语句:

while循环基本格式
while (条件){
语句1;
...
}
功能说明
运行功能和for类似,当条件成立循环执行语句花括号{}内的语句,否则跳出循环

 eg:

    var n=1;var s=0;while (n<=100){s=s+n;n++;}document.write(s)

  

异常处理:



try {//这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}
catch (e) {// 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。//e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally {//无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
}

  

eg:

    try {console.log(123)throw Error('Test Error')}catch(e){console.log(e)}finally {console.log('finally')}

  

ECMA 对象:

11种内置对象

包括:

Array ,String , Date, Math, Boolean, Number  Function, Global, Error, RegExp , Object

string 对象的方法:  

  大小写转换

  获取指定字符串

  查询字符串

  字符串替换

  字符串截取

  分割字符串

  连接字符串

数组Array对象

  创建的三种方式:

  

    var arr1=[1,2,3];var arr2=new Array(3);arr2[0]="hello";arr2[1]="world";arr2[2]="bigbao";var arr3=new Array('hello',23,true);

Array对象的方法

1、连接数组的方法   join

//书写格式
//x.join(bystr)
//使用注解
//
//x代表数组对象
//bystr作为连接数组中元素的字符串
//返回连接后的字符串
//与字符串的split功能刚好相反

eg:
var arr1=["hello","world","bigbao"];

var str1=arr1.join("--")

document.write(str1)

 2、连接数组 concat

//连接数组-concat方法
//
//x.concat(value,...)

eg:
    var arr1=["hello","world","bigbao"];

var str1=arr1.concat("xx1","xx2");

document.write(str1)

 3、数组排序-reverse sort

//x.reverse()倒序
//x.sort() 正序

 4、数组切片-slice

//x.slice(start, end)
//
//使用注解
//
//x代表数组对象
//start表示开始位置索引
//end是结束位置下一数组元素索引编号
//第一个数组元素索引为0
//start、end可为负数,-1代表最后一个数组元素
//end省略则相当于从start位置截取以后所有数组元素

 5、删除子数组 splice

//x. splice(start, deleteCount, value, ...)
//
//使用注解
//
//x代表数组对象
//splice的主要用途是对数组指定位置进行删除和插入
//start表示开始位置索引
//deleteCount删除数组元素的个数
//value表示在删除位置插入的数组元素
//value参数可以省略

Function 对象(重点)

 格式:

function 函数名 (参数){
函数体;

    return 返回值;
}

 

功能说明:

  • 可以使用变量、常量或表达式作为函数调用的参数
  • 函数由关键字function定义
  • 函数名的定义规则与标识符一致,大小写是敏感的

返回值必须使用return

Function 类可以表示开发者定义的任何函数。

 Function 类直接创建函数的语法如下:

function 函数名 (参数){ 


函数体;

return 返回值;

}



BOM对象

BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作。使用 BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。

使 JavaScript 有能力与浏览器“对话”。 

window(窗口)对象

    所有浏览器都支持 window 对象。概念上讲.一个html文档对应一个window对象.功能上讲: 控制浏览器窗口的.使用上讲: window对象不需要创建对象,直接使用即可.

window 对象的方法:

alert()            显示带有一段消息和一个确认按钮的警告框。
confirm()          显示带有一段消息以及确认按钮和取消按钮的对话框。他是有一个返回值的。可以用一个变量表示  var sel=confirm("hello world"),这个是和alert的区别
prompt()           显示可提示用户输入的对话框。var inp=prompt("input your name") 输入框输入内容后,点击确定会把输入值返回给inp open()             打开一个新的浏览器窗口或查找一个已命名的窗口。open("http://www.baidu.com")
close()            关闭浏览器窗口。
setInterval()      按照指定的周期(以毫秒计)来调用函数或计算表达式。
clearInterval()    取消由 setInterval() 设置的 timeout。
setTimeout()       在指定的毫秒数后调用函数或计算表达式。
clearTimeout()     取消由 setTimeout() 方法设置的 timeout。
scrollTo()         把内容滚动到指定的坐标。

 setInterval 和 clearInterval 



Title



 

History 对象

Location 对象

location.assign(URL)  (用一个新的的页面替换当前页面,可以后退)
location.reload()  刷新页面
location.replace(newURL)//注意与assign的区别(用一个新的页面替换当前的页面,不可以后退)

DOM对象(DHTML)*****

7.1 什么是 DOM?

DOM 是 W3C(万维网联盟)的标准。DOM 定义了访问 HTML 和 XML 文档的标准:

"W3C 文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。"

W3C DOM 标准被分为 3 个不同的部分:

  • 核心 DOM - 针对任何结构化文档的标准模型
  • XML DOM - 针对 XML 文档的标准模型
  • HTML DOM - 针对 HTML 文档的标准模型
  • 什么是 XML DOM?  ---->XML DOM 定义了所有 XML 元素的对象和属性,以及访问它们的方法。
  • 什么是 HTML DOM?---->HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它们的方法。

7.2 DOM 节点 

根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点(NODE):

  • 整个文档是一个文档节点(document对象)   ***
  • 每个 HTML 元素是元素节点(element 对象)  ***
  • HTML 元素内的文本是文本节点(text对象)
  • 每个 HTML 属性是属性节点(attribute对象)
  • 注释是注释节点(comment对象)

画dom树是为了展示文档中各个对象之间的关系,用于对象的导航。

节点(自身)属性:

  • attributes - 节点(元素)的属性节点
  • nodeType – 节点类型
  • nodeValue – 节点值
  • nodeName – 节点名称
  • innerHTML - 节点(元素)的文本值   (取指定标签中的html 文本内容 )

导航属性:

  • parentNode - 节点(元素)的父节点 (推荐)
  • firstChild – 节点下第一个子元素
  • lastChild – 节点下最后一个子元素
  • childNodes - 节点(元素)的子节点 

我们常用的导航属性:

parentElement              // 父节点标签元素children                        // 所有子标签firstElementChild          // 第一个子标签元素lastElementChild           // 最后一个子标签元素nextElementtSibling       // 下一个兄弟标签元素previousElementSibling  // 上一个兄弟标签元素


Title


hello p1

hello div2

  

节点树中的节点彼此拥有层级关系。

父(parent),子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

  • 在节点树中,顶端节点被称为根(root)
  • 每个节点都有父节点、除了根(它没有父节点)
  • 一个节点可拥有任意数量的子
  • 同胞是拥有相同父节点的节点

下面的图片展示了节点树的一部分,以及节点之间的关系:

         

访问 HTML 元素(节点),访问 HTML 元素等同于访问节点,我们能够以不同的方式来访问 HTML 元素:

全局查找标签的方法:

  • 通过使用 getElementById() 方法       通过  id 来寻找,得到的是一个唯一值
  • 通过使用 getElementsByTagName() 方法    通过标签名字寻,document.getElementsByTagName("span")
  • 通过使用 getElementsByClassName() 方法   通过 class  来寻找,得到的是是一个类似数组结构的
  • 通过使用 getElementsByName() 方法    通过标签的name属性来查找,得到的也是一个数组结构,所以得加上索引

局部(某一个标签内)查找标签不支持

getElementById
getElementsByName

7.3 HTML DOM Event(事件)

HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动作。

 

onclick        当用户点击某个对象时调用的事件句柄。
ondblclick     当用户双击某个对象时调用的事件句柄。onfocus        元素获得焦点。               //练习:输入框
onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.(鼠标离开输入框,就是失去焦点)
onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动)onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress     某个键盘按键被按下并松开。
onkeyup        某个键盘按键被松开。
onload         一张页面或一幅图像完成加载。
onmousedown    鼠标按钮被按下。(一直按着鼠标)
onmousemove    鼠标被移动。
onmouseout     鼠标从某元素移开。
onmouseover    鼠标移到某元素之上。

onmouseleave 鼠标从元素离开,和 onmouseout 的区别在具体项目中说onselect 文本被选中。 onsubmit 确认按钮被点击。

 

onfocus 和 onblur 的实例:



Title




 

onload 绑定事件:

script 标签可以放在head内

然后

hello p

onsubmit:(监听一个submit事件)

是当表单在提交时触发. 该属性也只能给form元素使用.应用场景: 在表单提交前验证用户输入是否正确.如果验证失败.在该方法中我们应该阻止表单的提交.

 



onsubmit


Event



onsubmit


事件传播

 

7.4 标签节点的增删改查

eg:



Title


div1
div2
div3

hello world

div4
  

 修改 HTML DOM 

  • 改变 HTML 内容 

        改变元素内容的最简答的方法是使用 innerHTML ,innerText。

  • 改变 CSS 样式 
1
2

"p2">Hello world!

document.getElementById("p2").style.color="blue";
                             .style.fontSize=48px
  • 改变 HTML 属性 

        elementNode.setAttribute(name,value)

        elementNode.getAttribute(name)<-------------->elementNode.value(DHTML)

  • 创建新的 HTML 元素 

        createElement(name)

  • 删除已有的 HTML 元素 

        elementNode.removeChild(node)

  • 关于class的操作 

        elementNode.className

        elementNode.classList.add

        elementNode.classList.remove

 遮罩层弹出框的例子:



遮罩层

  

正反选练习:



正反选




111111111
222222222
333333333

  

改装版;



正反选




111111111
222222222
333333333

 二级浮动

 

转载于:https://www.cnblogs.com/smail-bao/p/9817210.html

更多相关:

  • //获取某一个cookie的值 const getCookie = key => {var k = key, dc = document.cookie;if (dc.length > 0) {var s = dc.indexOf(k + "=");if (s != -1) {s = s + k.length + 1;var e = d...

  • var SGheadMapPoints = {/*obj={ maxLng: minLng: maxLat: minLat: maxCount:最大人数 minCount:最小人数 total:点位数量 }*/get: function (obj) {var arr = [];obj.maxCount || (obj.maxCount...

  • //自动搜索指定的请柬 var alertTipText = "请柬找到了,就在这个网页里面,自己仔细看吧"; var delay = 1 * 1000;//1秒后循环下一页寻找 /*获取子DOM元素在父元素里面的索引位置(是第几个元素)*/ function getNodeListIndex(childNode) {return c...

  •  获取天气情况(不支持跨域) /*json原生获取*/ function getJSON() {var XML;var url = "http://wthrcdn.etouch.cn/weather_mini?city=杭州";if (window.XMLHttpRequest) {XML = new XMLHttpRequest(...

  • 蒙特卡洛法和时序差分学习Note 10 蒙特卡洛法和时序差分学习 Monte Carlo and Temporal Difference10.1 蒙特卡洛法和时序差分学习 (Monte Carlo and Temporal Difference)10.2 Q中的TD学习(TD Learning in QQQ )10.3 资格迹(Eli...

  • 强化学习(五) - 时序差分学习(Temporal-Difference Learning)及其实例5.1 TD预测例5.1 回家时间的估计5.2 TD预测方法的优势例5.2 随机移动5.3 TD(0)最优性例5.3:批量更新下的随机行走例5.4: You are the Predictor5.4 Sarsa:策略 TD控制例 5.5...

  • 新建一个login文件,里面存放的就是用户登录的模块。 在body...

  • 练习1:Ecshop  录制登录后退出业务  打开系统  存储页面的标题     a.点击"登录"按钮     b.输入用户名:testing      存储输入的用户名     c.输入密码:123456     d.点击"立即登录"按钮      存储登录成功的提示信息      存储登录成功后页面显示的用户名     e.选择...

  • 点云PCL免费知识星球,点云论文速读。文章:DSP-SLAM: Object Oriented SLAM with Deep Shape Priors作者:Jingwen Wang Martin Runz Lourdes Agapito编译:点云PCL代码:https://github.com/JingwenWang95/DSP-S...

  • RAM缓存 新RAM缓存算法(CLFUS) 新的RAM缓存使用的创意来自许多缓存替换策略和算法,包括LRU,LFU,CLOCK,GDFS及2Q,它被命名为时钟周期内最小频繁使用大小算法CLFUS(Clocked Least Frequently Used by Size)。它避开了任何专利算法,具有如下特性: 均衡最近性(Rec...

  • MP4 |视频:AVC,1280×720 30 fps |音频:AAC,48 KHz,2 Ch |时长:2h 12m 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:560M C4D是一个有抱负的运动图形艺术家和设计师的重要工具。借助C4D,您可以使用3D对象、动态效果和动画来增强运动图形、模型和可视化效果。本课...

  • 文章目录先说问题:再说解决尝试1:尝试2(该尝试建议先在自己环境搭配对应业务测试通过后再现场尝试): 感谢 学无止境996同学的陪伴和vigourtyy美丽女友的支持,直到这个解决问题的深夜 先说问题: ceph 12.2.1生产环境:3副本 tier + 3副本data 机房在拥有业务的情况下重启集群交换机,产生如下场景...

  • 这周主要学习了java中的类和对象的知识点,发现和C++中的类和对象极为相似,对于类和对象的概念理解起来也简单。同时在自学的过程中也把类的知识重新复习巩固了一下(如类的三大特征:继承,封装和多态,构造,成员对象的访问权限,构造,无参有参函数的调用等),同时也了解到一些新的概念,比如类对象创建和引用占据堆内存和栈内存,输出对象时默认调...