JavaScript学习笔记(6月份)
由于笔记比较杂,本身学习程度并不理想,所以暂时没有整理这些繁杂的笔记。
ps:博客园markdown用起来和看起来都舒服太多了,这才是我了解的那个markdown,又回来了!
笔记
DOM对象 document object model
DOM 中节点种类一共有三种
注:在JS中所有的节点都是对象
<div title="属性节点">文本内容</div>
<div></div> => 元素节点
title => 属性节点
文本内容 => 文本节点
查找元素节点方法
- document.getElementById(id);//通过当前元素节点的id,获取对应元素节点
- 元素节点对象: 
 通过这个节点对象(note),访问它的一系列属性,以下就是对象名称:- note.tagname 获取元素节点的标签名
- note.innerHTML 获取元素节点标签间的内容
- note.id
- note.className
- note.title
- note.style等
 
- HTML属性的属性(对应元素节点的对象): 
 id
 title
 style
 innerHTML
 className
 元素节点.属性
 元素节点[属性]
    document.getElementsByTagName()
    node.getElementsByTagName();
- 从node节点开始,找出符合的标签节点 
 参数:标签名;
 功能:获取当前页面上所有符合改标签的元素节点
 返回值:一个装有符合条件的元素节点的数组
- document.getElementsByName(); 只能从document调用 ps:许多的name可以一样 
 参数:name的值
 返回值:装有符合条件的元素节点的数组
- document.getElementsByClassName() ps:可以从某一个元素节点去查找 
 参数:class
 返回值:所有符合条件的元素节点组合的数组。
 在第版本的ie浏览器中是不支持的 处理办法
 获取父节点的所有元素,然后进行一一判断,符合className等于参数class就可以加入数组中。
封装函数·setAttribute·childNotes·Attributes·parentNode
- id document.getElementById()
- class document.getElementsByClassName();
- name document.getElementsByName();
- tagName note.getElementsByTagName();
通过封装函数,简化上述操作。
css选择器
- #id //通过id获取元素节点
- .class //通过className获取元素节点
- tagName //通过tagName获取元素节点
- name=xxx //通过name获取元素节点
详情看$()方法 //通过封装css选择器的方法,来快速的获取对应的标签
作用:操作当前元素的某一个属性的
get/setAttribute() 获取元素属性的两种方法
removeAttribute()
- 和点出来的class属性范围区别:点操作是通过元素节点点出className参数,
 而set/get是通过传入class参数来获取 例如:Obtn.className == Obtn.getAttribute("class")
- 用户自定义属性的支持。自定义xxx="yyyy" Obtn.setAttribute("xxx","yyy")document.getElementsById("btn").getAttribute("id")
childNotes(); 获取当前节点的所有子节点,包括三种节点类型 nodeName,nodeType,nodeValue
DOM节点类型
元素节点 属性节点 文本节点
作用:
(1)删除子节点中的空白节点
方法:使用正则表达式进行删除。/^\s+$/.test() 判断是否value为空
删除空白节点的时候必须是倒序删除,原因自己想,想不到撞死,提示:他是一个数组类型
(2)不知道
ownerDocument 结果一般是document
parentNode 父亲节点 previousSibling 同级别的上一个节点 nextSibling 同级别的下一个元素节点
attributes 返回该节点的属性节点,[集合]
集合特点:1.不重复;2.无序
其中一种访问方法:node.attributes.getNamedItem("id");
dom创建带文本的元素节点
- document.write() //写入
- document.createElement("div") 插入标签
- note.appendChild()
- parent.replaceChild(newNode,oldNode)
- note.cloneNode() 参数:true则将文本内容传入,否则默认只克隆标签
 ps:系统没有提供同时插入文本和标签的方法
	var note = document.createElement("span")
	var Ntext = document.createTextNode("文本内容") 插入文本内容
	note.appendChild(Ntext)
	odiv.appendChild(note)
事件
1. 事件基础
访问web界面的用户引起的一系列操作
鼠标事件,键盘事件,HTML事件
函数:on+事件名称
2. 事件流
事件:捕获,目标,冒泡
阻止冒泡:
	evt.cancelBubble = true //对主流浏览器和ie生效
	evt.stopPropagation() //只对主流浏览器生效
事件委托:利用事件冒泡原理,把本应添加在元素上的事件委托给他的父级(外层)
多个重复的事件,可以把这个事件委托到父级来实现。更加简洁
阻止默认事件
比如<a></a>href跳转标签
- onclick 方法里面,return false
- evt.preventDefault();
- evt.returnValue = false;
3. DOM2级事件
DOM2级事件处理程序
添加事件监听器:addEventListener(事件名,处理函数,布尔值)
移除事件监听器:removeEventListener(事件名,处理函数)
IE下的事件监听器:attachEvent(事件名,处理函数) detachEvent(事件名,处理函数)
ps:普通事件中点击事件会被后一个点击事件给覆盖,而二级事件不会被其他事件所覆盖。可以重复添加
布尔值为false的时候,为正常的冒泡事件,true为捕获(从外往内)
cookie
- http协议
- cookie的概念
- cookie的基本操作
- cookie的封装
http:超文本传输协议,用于从web服务器传输超文本到本地浏览器的传输协议,是一个无状态的协议
cookie:缓存存在本地浏览器中的数据,包括增删改查的四个部分
document.cookie = "userName=paikle";
//这种方式添加的cookie会随着浏览器的关闭而消失,要设置时间限制的cookie需要在后面添加date限制
设置时间来让cookie过期,从而达到删除的效果。
var oDate = new Date(); //创建时间
oDate.setDate(oDate.getDate()+3) //将时间设置为三天之后
document.cookie = "user = paikle;expires="+oDate; //将cookie过期时间设置为三天后
cookie的封装
setcookie(name,value,day) //设置cookie
getcookie() //获取cookie
removecookie() //移除cookie
正则表达式
正则表达式是由普通字符和特殊字符组成的对字符串进行过滤的逻辑公式
修饰符 g i
g 表示会全部搜索,返回符合的数字,i 表示忽略大小写
 var reg = /abc/g;
 var str = 'abcabc';
1.test方法
正则表达式方法,检测字符串是否又符合规则的字串,有返回true,无为false
//两种构造方法
var rge = /abc/;
var reg = new RegExp("abc");
var str = "ab";
var flag = reg.test(str)
2.match方法 字符串方法
console.log(str.match(reg))
3.search方法 字符串的方法 用于查找符合规则的字串的位置,只返回第一个匹配的位置
var rg = /bc/
console.log(str.search(rg))
4.split方法
5.replace方法
var tmd = /tmd/gi
var str = "abc tmd tmd TMd sabi";
console.log(str.replace(tmd,"*"));
6.exec 正则表达式的方法 将匹配成功的内容放到数组内,没有匹配成功返回null
和match差不多的用法,不过在配置全局匹配的时候不能一次出来
| 符号 | 效果 | 
|---|---|
| . | 除了换行符之外的所有单个字符 | 
| var rag = /g..gle/gi;var str = 'googlegole';console.log(rag.test(str)) | |
| * | 重复多次匹配,匹配任意次数 不管中间多少次(0-n) | 
| + | 至少有一次重复匹配 | 
| ? | 进行0或者1次匹配 | 
| [] | 一个字母表示可出现的范围,[0-9] [a-z] | 
| \w | 数组字母下划线等同于[0-9a-zA-Z_] | 
| \W | 非数字字母下划线 | 
| \d | 数字0-9 | 
| \D | 非数字 | 
| \s | 匹配空格 \S 非空格 | 
| {m,n} | 至少匹配m次,至多匹配n次 | 
| /^开头.*结尾&/ | |
| | | 或 /a | 
| () | 分组 将内容作为一个整体去匹配 | 
ES6
- let的使用
- 解构赋值
- 模板字符串
- 箭头函数
- set结构和map结构
- 生成器函数
- 类class
1.let的使用
用来声明变量。用法类似于var ,但是所声明的变量,只在let命令所在的代码块有效。
存在块级作用域 {}
不存在声明提升
不允许重复声明(包括普通变量和函数参数)
const使用 用来声明常量,不要试图改变常量的值,其他语法参照let
2.解构赋值
	//默认赋值
	let [a,b,c] = [1,2,3]
	[a,b=2] = [3] // a = 3,b = 2
	let c ; //undifined;
	[a=1] = [c] //a = 1
	//对象
	let {a,b} = {a:'100',b:'200'} // a = 100 , b = 200
	let {a:b} = {a:111} // b = 111;
	let {a,b = 4} = {a:1} //a = 1;b = 4
3.箭头函数
- 只有一个表达式
- 含有多条语句
- this的指向问题
 在箭头函数内的this指向定义时的作用域,而不是执行时的作用域。
var name = "作用域1"
	var obj = {
		'name':'jonson',
		'syHello':()=>{
			this.name;//this指向定义的作用域,则返回:作用域1
		}
	}
//ps
var obj = {
	'name':"joson",
	"syHello":function(){
		this.name;//joson
	}
}
3.set结构 & map结构
set
set的值是不能重复的,相当于集合
var set = new Set([1,3,2,2,34,1,3])
var arr = [...set]  扩展运算符,将类数组对象转换以逗号分割的序列,set转换为数组的方式
arr 为数组形式
使用for of 遍历set or 数组
for(let et of set){ //et直接代表元素
	console.log(et)
}
set.size 长度 set.add() 添加一个 set.delete() 删除某一个 set.has() 是否包含某一个 set.clear() 清空
keys() 返回键名
values() 返回键值
entries() 返回键值对
forEach()
map
let map = new Map([['name':'john'],['age':'30']])
map.set(key,value) 添加元素
map.set(key,value) map.get(key) map.delete() map.has(key) map.clear();
keys() 返回键名
values() 返回键值
entries() 返回键值对
forEach() map.forEarch((value,key) => console.log(value*2))
4.生成器函数
5.class
	class Person{
		constructor(name){
			this.name = name;
		}
	}
JS动画 (7.1记)
JavaScript学习笔记(6月份)的更多相关文章
- JavaScript学习笔记[0]
		JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ... 
- Java程序猿的JavaScript学习笔记(汇总文件夹)
		最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ... 
- Java程序猿的JavaScript学习笔记(8——jQuery选择器)
		计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ... 
- Java程序猿JavaScript学习笔记(2——复制和继承财产)
		计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ... 
- Java程序猿的JavaScript学习笔记(3——this/call/apply)
		计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ... 
- Java程序猿JavaScript学习笔记(4——关闭/getter/setter)
		计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ... 
- Java程序猿JavaScript学习笔记(14——扩大jQuery UI)
		计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ... 
- javascript学习笔记(四) Number 数字类型
		数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ... 
- JavaScript学习笔记之数组(二)
		JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ... 
随机推荐
- IntelliJ IDEA-设置字体大小
			setting 设置字体font大小,点击apply-ok 
- 通过 UNSAFE 来实现一个 Atomic 的 CAS 辅助类【原创】
			public abstract class AbstractUnSafeCas<T> { @SuppressWarnings("unused") private vol ... 
- R3300L运行CoreELEC, EmuELEC和Armbian
			R3300L的参数 CPU: S905LRAM: Samsung K4B4G1646E-BCMA 512MB * 2 = 1GBROM: Samsung KLM8G1WEPD-B031 8GB eMM ... 
- nanopi的ds18b20温度传感器测试
			参考(抄袭)资料在这里 先接线,3.3v,gnd,数据输出脚,我是PG11 vim /boot/armbianEnv.txt overlays=w1-gpio param_w1_pin=PG11 pa ... 
- Java12新特性 -- 默认生成类数据共享(CDS)归档文件
			默认生成类数据共享(CDS)归档文件 同一个物理机/虚拟机上启动多个JVM时,如果每个虚拟机都单独装载自己需要的所有类,启动成本和内 存占用是比较高的.所以Java团队引入了类数据共享机制 (Clas ... 
- 泡泡一分钟:Optimal Trajectory Generation for Quadrotor Teach-And-Repeat
			张宁 Optimal Trajectory Generation for Quadrotor Teach-And-Repeat链接:https://pan.baidu.com/s/1x0CmuOXiL ... 
- Nginx学习之入门
			1. 概念 (1) 什么是nginx? Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. (2) 什么是反向代 ... 
- 解决 Yii2 assets 不自动更新问题
			问题描述:core 里的 Asset (AssetBundle)更新 js 或 css 时,更新内容没有直接同步到其他模块 -- 如果想节约时间,直接拖到文章底部看结果就好~ 一.项目目录结构(大概介 ... 
- CMDBuild部署教程
			一.CMDBuild简介 CMDBuild是一个通过Web界面配置的CMDB系统.可以通过Web界面来进行建模.创建资产数据库,并处理相关的工作流程.CMDBuild可用于集中管理数据库模块和外部应用 ... 
- Python删除文件,空文件夹,非空文件夹
			首先,在Python中文件路径是这种格式: file_path1 = r'F:\test\1' 删除文件,命令 os.remove(file_path1) 删除空文件夹,命令 os.rmdir(fil ... 
