黑马pink老师 JavaScript 视频笔记

JavaScript组成

ECMAScript

由ECMA国际进行的标准化的一门编程语言,在万维网上应用广泛,被称为 JavaScript 或 JScript ,但实际上后两者是 ECMAScript 语言的实现和拓展

DOM

文档对象模型,是处理可扩展标记语言的标准编程接口。通过DOM提供的接口可以对页面上的各种元素进行操作(大小、位置、颜色等)

BOM

浏览器对象模型,提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。通过 BOM 可以操作浏览器窗口,如弹出框、控制浏览器跳转、获取分辨率等

JavaScript 三种书写位置

行内

直接写到元素内部

  • 可以将单行或少量JS代码写在HTML标签属性中(on开头的属性),如:onclick
  • 在 HTML 中尽量使用双引号,在 JS 中尽量使用单引号
  • 可读性差,在 HTML 里写太多 JS 代码,不方便阅读
  • 引号易错,引号多层嵌套匹配时,非常容易混淆
  • 特殊情况下使用

内嵌

写在里面

  • 可以将多行 JS 代码写在

外部

写在新建的 JavaScript 文件里,html head区写

  • 利用 HTML 页面代码结构化,把大段 JS 代码独立到 HTML 页面外,美观又方便
  • 引用外部 JS 文件的 script 标签中间不可以写代码
  • 适合于 JS 代码量比较大的情况

JavaScript 注释

单行注释

//… ctrl + /

多行注释

/* … */ shift + alt + a

JavaScript 输入输出语句

方法 说明 ` 归属

alert(msg) 浏览器弹出警示框 浏览器

console(msg) 浏览器控制台打印输出信息 浏览器

prompt(info) 浏览器弹出输入框,用户可以输入 浏览器

变量的使用

声明变量

var age; //声明一个名称为 age 的变量

var 是一个 JS 关键字,用来声明变量 (variable 变量的意思)。使用后计算机会自动分配内存空间,不需要人来管

初始化

var age = 18; //声明变量的同时赋值为18

变量的使用

//1:用户输入姓名,存储到一个 myname 的变量里去

var myname = prompt(‘请输入您的名字’);

//2:输出这个用户名

alert(myname);

变量语法拓展

更新变量

一个变量被重新赋值后,它原有的值就会被重新覆盖,变量值将以最后一次赋值为准

同时声明多个变量

同时声明多个变量,只需要写一个 var ,多个变量名之间使用英文逗号隔开

var age = 18 ,

​ address = … ,

​ gz = 2000;

变量的命名规范

  • 由字母(A-Z,a-z)、数字(0-9)、美元符号( ) 组成,如: u s r A g e , n u m 01 , ) 组成,如:usrAge,num01, )组成,如:usrAge,num01,name
  • 严格区分大小写,如:var app 和 var App 是两个不同变量
  • 不能以数字开头,如:18age 是错的
  • 不能是 关键字、保留字,如:var,for,while
  • 变量名得有意义
  • 遵守驼峰命名法:首字母小写,后面单词的首字母大写

交换两个变量

1.定义一个临时变量 temp

2.把 a1 给临时变量 temp

3.把 a2 给 a1

4.把 temp 给 a2

变量小结

  • 因为一些数据需要保存,所以需要变量
  • 变量就是一个容器,用来存放数据,方便使用
  • 变量是内存里的一块空间,用来存储数据
  • 一定要先声明变量,然后赋值
  • 声明变量本质是 去申请内存空间
  • 命名要规范:驼峰命名法
  • 区分变量名是否合法
  • 学会交换两个变量

数据类型

为了便于把数据分为所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型

JavaScript 是一种弱类型或者说动态语言,意味着不用提前声明变量的类型,运行中会被自动确认

JavaScript 拥有动态类型,同时也意味着相同的变量可用于不同的类型

数据类型分类

简单数据类型

名字 说明 默认值

Number 数字型,包含整形和浮点型 0

Boolean 布尔值型,true和false等价于1和0 false

String 字符串型,带’’ “”

Underfined var a;声明了变量 a ,但没给值 unferfined

Null var a = null;声明了变量a为空值 null

JS 数值前面加 0 为八进制,0x 为十六进制

数字型 Number

最大值:

alert(Number.MAX_VALUE); // 1.7976931348623157e+308

最小值:

alert(Number.MIN_VALUE); // 5e-324

三个特殊型:

Infinity : 代表无穷大,大于任何数

-Infinity : 代表无穷小,小于任何数

NaN : Not a number, 代表一个非数值

isNaN:用来判断非数字,并且返回一个值。如果是数字,返回false,如果不是数字,返回true

字符串型 String

HTML 里使用双引号, JS 里推荐使用单引号

字符串引号嵌套:JS 可以用单双引号嵌套双引号,或者用双引号嵌套单引号(外双内单,外单内双)

即:’ “这是单包双” ’ 和 " ‘这是双包单’ "

转义符 解释

\n 换行符,n 是 newline 的意思

\\ 斜杠\

\’ ’ 单引号

\" ‘’ 双引号

\t tab 缩进

\b 空格,b 是 blank 的意思

字符串长度即拼接

字符串长度:通过字符串的 length 属性可以获取整个字符串的长度

如:str1.length

字符串拼接:多个字符串可以用 + 进行拼接,字符串 + 任何类型 = 拼接之后的字符串

拼接前会把与字符串相加的任何类型转换为字符串,在拼接成一个新的字符串

字符串拼接加强

console.log(‘字符串1’ + 变量 + ‘字符串2’); //可以通过改变变量的方法进行对整个拼接出来的字符串进行修改

布尔型

布尔类型只有两个值:true 和 false ,其中 true 表示真 , false 表示假

true 参与加法运算当1来看,false 当0来看

undefined

undefined 和 数字 相加,最后结果是 NaN

null

null 代表空值

null + 1 结果还是 1

获取变量数据类型

typeof 可用来获取检测变量的数据类型

var num = 10; //定义一个 number 类型的变量

console.log(typeof num); //结果是 number

var str = ‘gsl’; //定义一个 string 类型的变量

console.log(typeof str); //结果是string

prompt 取过来的值是 字符串型的

数据类型转换

通俗的说,就是把一种数据类型的变量转换为另外一种数据类型

转为字符串形

方式 说明 案例

toString() 转成字符串 var num = 1;alert(num.toString());

String()强制转换 转成字符串 var num = 1;alert(String(num));

加号拼接字符串 和字符串拼接结果都是字符串 var num = 1;alert(num + ‘字符串’);

第三种也叫隐式转换

转为数字型(重点)

方式 说明 案例

parseInt(string) 将string类型转为整数数值型 parseInt(‘78’)

parseFloat(string) 将string类型转为浮点数数值型 parseFloat(‘78.21’)

Number() 将string类型转换为数值型 Number(‘12’)

js 隐式转换( - , * , / ) 利用算数运算饮食转换为数值型 ‘12’-0

转为布尔型

方式 说明 案例

Boolean() 其他类型转为布尔型 Boolean(‘true’)

**代表空、否定的值会被转为 false **,如:0、NaN、null、undefined ,其余都会被转为 true

DOM

获取元素

根据ID获取

使用 getElementById() 方法,可以返回带有 ID 的元素对象

var xxx = document.getElementById(‘某个元素的id’);

根据标签名获取

直接根据标签名获取

使用 getElementsByTagName() 方法,可以返回带有指定标签名的对象的集合,以伪数组形式存储

var xxx = getElementsByTagName(‘标签名’);

注意:

  • 得到的是一个对象的集合,所以想要操作里面的元素需要遍历

  • 得到元素对象是动态的

  • 如果只有一个,返回的还是伪数组形式

  • 如果没有这个元素,返回的是空的伪数组形式

根据父级内部的标签名获取

element.getElementsByTagName(‘标签名’);

**注意:**父元素必须是单个对象(必须指明是哪个元素对象) 获取的时候不包括父元素自己

如:

var ol = document.getElementsByTagName(‘ol’);

console.log(ol[0].getElementsByTagName(‘li’)); //输出第一个 ol 的 li 元素

或:

var ol = document.getElementsById(‘ol’); //查找 id 为 ol 的标签

console.log(ol.getElementsByTagName(‘li’)); //输出这个标签里所有 li 元素

通过 HTML5 新增的方法获取

类名选择

document.getElementsByClassName(‘类名’); //根据类名返回元素对象集合

如:

var xxx = document.getElementsByClassName(‘box’);

console.log(boxs);

指定选择器选择

document.querySelector(‘选择器’); //根据指定选择器返回第一个元素对象,切记选择器要加符号

如:

var firstbox = dodument.querySelector(‘.box’); //选择第一个类名为 box 的元素对象

console.log(firstbox);

或:

var nav = dodument.querySelector(‘#nav’); //选择第一个id名为 nav 的元素对象

console.log(nav);

根据指定选择器返回

document.querySelectAll(‘选择器’); //根据指定选择器返回所有元素对象的集合

如:

var allbox = document.querySelectorAll(‘.box’);

console.log(allbox);

获取 HTML 和 body 元素

var xxx = document.body;

var xxx = document.documentElement;

事件

事件概述

JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为

简单理解:触发 — 响应机制

每个元素都可以触发

事件三要素

事件源

事件被触发的对象

事件类型

如何触发 什么事件 比如:鼠标点击(onclick) 鼠标经过 键盘按下

事件处理程序

通过一个函数赋值的方式完成

如:

<button id = "btn">
    唐伯虎
</button>

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

执行事件的步骤

获取事件源

	var div = document.querySelector('div');

注册事件(绑定事件)

	div.onclick

添加事件处理程序(采取函数赋值形式)

div.onclick = function(){
	console.log('...');
}

常见鼠标事件

鼠标事件								 触发条件

onclick									鼠标点击左键触发

onmouseover								鼠标经过触发

onmouseout								鼠标离开时触发

onfocus									获得鼠标焦点触发

onblur									失去鼠标焦点触发

onmousemove								鼠标移动触发

onmouseup								鼠标弹起触发

onmousedown								鼠标按下触发

操作元素

改变元素内容

element.innerText

从初始位置到最终位置的内容,但它去除 html 标签,同时空格和换行也会去掉

element.innerHTML

从初始位置到最终位置的内容,保留 html 标签,同时空格和换行也保留

innerText 和 innerHTML 的区别

这两个属性是可读写的,也就是能获取相对应元素里面的内容

innerText 不识别 html 标签且去除空格和换行,innerHTML 识别 html 标签

如:

var div = document.querySelect('div');

div.innerText = '<strong>今天是:</strong> 2023年...';

div.innerHTML = '<strong>今天是:</strong> 2023年...';

/*上面两个中,innerHTML 会加粗,而 innerText 不会,会把 <strong> 标签也输出出来,因此,要是想对元素里添加一些标签进行修改,应该用 innerHTML*/

表单元素的属性操作

利用 DOM 可以操作如下表单元素的属性:

type value checked selected disabled

var btn = document.querySelect('button');
var input = document.querySelect('input');

btn.onclick = function(){
    input.value = '被点击了';
    //如果想要某个表单被禁用,不能再点击了,就用 disabled
    btn.disabled = true;this.disabled = true;
    //this 指向的是事件函数的调用者
}

样式属性操作

可以通过 JS 修改元素的大小、颜色、位置等样式

  • element.style 行内样式操作

  • element.className 类名样式操作

注意

  • JS 里的样式采取驼峰命名法 比如:fontSize background Color

  • JS 修改 style 样式操作,产生的是行内样式,CSS 权重比较高

行内样式操作

element.style.xxx = xxx;

隐藏一个 div

var btn = document.querySelector('.close-btn');
var box = document.querySelector('.box');

btn.onclick = function(){
	box.style.display = 'none';
}

获得焦点事件

onfocus

失去焦点事件

onblur

使用 className 修改样式属性

element.className = xxx;

把类 change 的效果赋值给点击之后的 div

<div>文本</div>

<script>

	var test = document.querySelector('div');
	
	test.onclick = function(){
	
		this.className = 'change';
		
	}
	
</script>

注意

  • 如果样式修改较多,可以采取操作类名放是更改元素样式

  • class 因为是保留字,因此使用 className 来操作元素类名属性

  • className 会直接更改元素的类名,会覆盖原先的类名

如果想要保留原先的类名,我们可以这样做:

this.className = 'first change';

自定义属性的操作

获取属性值

  • element.属性 获取属性值

  • element.getAttribute(‘属性’);

  • element.dataset.index (H5新增)

区别

  • element.属性

获取内置属性值(元素本身自带的属性)

  • element.getAttribute(‘属性’);

主要获得自定义的属性(标准) 程序员自定义的属性

<div id = "demo" index = "1"></div>

//js 部分:

var div = document.querySelector('div'); 

console.log(div.id);	//获取内置属性值

console.log(div.getAttribute('index'));	//获得自定义的属性值(如 自定义的index)

设置移除自定义属性

  • element.属性 = ‘值’

设置内置属性值

  • ·element.setAttribute(‘属性’,‘值’);

主要针对于自定义属性


div.id = 'test';	

div.className = 'navs';	//设置内置属性值

div.setArribute('index',2);		//把自定义的属性值设置为2

div.setArribute('class','footer');	//把 div 的类换成 footer
  • element.removeAttribute(‘属性’);

移除属性

<div id = "demo" index = "1" class = "nav"></div>

//js 部分:

div.removeAttribute('index');

设置 H5 自定义属性

data- 开头作为属性名并赋值

<div data-index= "1"></div>

或使用 js 设置

element.setAttribute('data-index',2)

节点操作

父子层级关系

父级节点

var xxx = document.querySelector('.xxx');

console.log(xxx.parentNode);

子级节点

第一种

得到所有子节点的集合,包含 元素节点、文本节点等

var xxx = document.querySelector('.xxx');

console.log(xxx.childNodes);

文本节点 nodeType : 3

元素节点 nodeType : 1

var xxx = document.querySelector('.xxx');

for(var i = 0; i < ul.childNodes.length; i++){
    if (ul.childNodes[i].nodeType == 1){
        //如果 ul 的子节点是元素节点
        console.log(ul.childNodes[i]);
    }
}
第二种

返回所有的子元素节点集合,其余节点不返回

var xxx = document.querySelector('.xxx');

console.log(xxx.children);
获取第一个子节点

返回不管是文本节点还是元素节点

parentNode.firstChild

返回第一个元素节点

parent.firstElementChild

或

parent.children[0]
获取最后一个节点

返回不管是文本节点还是元素节点

parentNode.lastChild

返回最后一个元素节点

parentNode.lastElementChild

或

parent.children[parent.children.length - 1]

兄弟节点

获取下一个节点

返回当前元素下一个兄弟节点,不管是文本节点还是元素节点

node.nextSibling

返回当前元素下一个元素节点

node.nextElementSibling

获取上一个节点

返回当前元素上一个兄弟节点,不管是文本节点还是元素节点

node.previousSibling

返回当前元素上一个元素节点

node.previousElementSibling

为了解决兼容性问题,可以自己封装一个

function getNextElementSibling(element){
    var el = element;
    while(el = el.nextSibling){
        if (el.nodeType === 1){ //如果是元素节点
            return el;
        }
    }
    return null;
}

创建节点

document.creatElement('li')

添加节点

node.appendChild(child)	//node 父级 child 子级

将一个节点添加到指定父节点的子节点列表末尾,类似于 css 里的 after 伪元素

node.insertBefore(child,指定元素)//node 父级 child 子级 指定元素 父节点的某个子节点

将一个节点添加到父节点的指定子节点前面,类似于 css 里的 before 伪元素

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值