第一章:
A:JS的基本结构
<script type="text/javascript">
//JS代码
</script>
B:引用JS的三种方式
1:行内
<button type="button" onclick="javascript:alert('宝宝')">点一点</button>
2:内部
<script type="text/javascript">
//JS代码
</script>
3:外部
<script src="外部JS的文件路径"></script>
C:JS的组成
EcmaScript(JS核心) BOM(浏览器对象模型) DOM(文档对象模型)
D:JS的组成成分
①:注释
单行注释 // 多行注释 /* */
②:输出语句
文档输出:document.write("宝宝");
控制台输出:console.log("宝宝");
③:变量
1:声明变量且赋值(赋值时才知道类型)
var num = 19;
var name = "宝宝";
2:变量的数据类型
number(数值类型) string(字符串类型) boolean(布尔) null(空值) undefined(定义未赋值)
3:返回变量或者值的类型
typeof(变量或者值);
4:判断变量或者值是否是非数字
isNaN(变量或者值); //如果是非数字,返回true.
④:控制语句(和java一样)
forEach(var temp in 数组){
//temp 为下标
}
⑤:运算符(和java一样)
==:只比较值内容 ===:内容和类型都要相同
⑥:函数(自定义)
1:声明函数
function 函数名(参数){
}
例如:
//有参数的函数
function f1(name){
document.write(name);
}
//调用
f1("宝宝");
//有返回值的函数
var name = function(){
return "宝宝";
}
//调用
document.write(name());
⑦:数组
1:定义数组
var 数组名 = new Array(初始长度);
var 数组名 = [1,2,3,4];
var 数组名 = new Array(1,2,3,4);
例如:
var nums = new Array(3);
//赋值
nums[0] = "茄子";
nums[1] = "黄瓜";
nums[2] = "藕";
2:数组的遍历
for(var i=0;i<nums.length;i++){
document.write(nums[i]);
}
// num 下标
for(var num in nums){
document.write(nums[num]);
}
第二章:
A:函数(系统函数)
①将字符串转换为整数
parseInt();
parseInt("19.7abc"); //19
parseInt("abc19.7"); //NaN
②将字符串转换为小数
parseFloat();
③判断是否为非数字
isNaN();
B:变量的作用域
①:全局变量:
定义在函数的外部
②:局部变量:
定义在函数的内部
③:隐式全局变量:
定义在函数的内部,没有使用var关键字定义
C:事件
onclick:鼠标点击事件 || click
onmouseover:鼠标移入事件 || mouseover
onmouseout:鼠标移出事件 || mouseout
D:调试
1:进入浏览器,使用F12(或者Fn+F12)打开开发者模式. 2:查看源代码,设置断点 3:刷新运行,使用F10逐步调试. 4:查看变量变化.
第三章:
A:window对象
1:location
location.href = "设置路径";
2:history(历史路径的存储)
①向前
history.go(1); <--> history.forward();
②向后
history.go(-1); <--> history.back();
B:window方法(五个常用)
open(); //打开新窗体
close(); //关闭
alert(); //提示框
prompt(); //输入框
confirm(); //确认框
setInterval(); //设置定时器(周期性)
setTimeout(); //设置定时器(一次性)
C:document对象
1:根据ID获取节点(返回一个节点对象)
var el = document.getElementById("ID的名称");
2:根据标签名称(返回节点列表)
<p>kaikai</p>
var el = document.getElementsByTagName("标签名称");
3:根据属性名称(返回节点列表)
<p name="kaikai"></p>
var el = document.getElementsByName("name属性名称");
4:根据className来获取节点(返回节点列表)
<p class="kaikai"></p>
var el = document.getElementsByClassName("class属性名称");
D:定时函数
1:一次性(延迟指定时长--毫秒)
①设置定时器
var num = setTimeout("方法名称()",2000);
②关闭定时器
clearTimeout(num);
2:周期性
①设置定时器
var num = setInterval("方法名称()",2000);
②关闭定时器
clearInterval(num);
E:日期函数
1:定义日期函数()
var date = new Date(); //获取当前时间(国际时间)
//获取当前的年、月、日、时、分、秒
var year = nowDate.getFullYear(); //获取年
var mon = nowDate.getMonth()+1; //获取月
var date = nowDate.getDate(); //获取日
var hour = nowDate.getHours(); //获取时
var min = nowDate.getMinutes(); //获取分
var se = nowDate.getSeconds(); //获取秒
F:数组(方法)
数组名.join('拼接符');--拼接 数组名.push('内容');--追加 数组名.sort();----排序 PS: 数组名.sort()--默认排序先排1开头的 数组名.sort(function(a,b){ return a-b; //升序 })
G:数学函数
ceil() 向上取整 floor() 向下取整 round() 四舍五入 random() 随机数(0-1随机数)(*)
第四章(DOM文档对象模型):
A:DOM分类
DOM core(DOM核心) HTML-DOM CSS-DOM
B:节点分类
①:节点属性
nodeType(1代表元素、3代表文本) nodeName(节点名称) nodeValue(主要针对表单元素多一点,value属性值)
②:获取节点
1:上一章学过的三种(略)
2:根据层次关系来访问节点(注意:文本节点的影响--空格)
parentNode 父节点
firstChild 第一个子节点
lastChild 最后一个子节点
ChildNodes 子节点
previousSibling 上一个相邻节点
nextSibling 下一个相邻
3:根据元素节点来访问节点
parentElementNode 父节点
firstElementChild 第一个子节点
lastElementChild 最后一个子节点
ChildElementNodes 子节点
previousElementSibling 上一个相邻节点
nextElementSibling 下一个相邻
③:获取节点文本、网页
document.write(el.innerText);
el.innerText = "宝宝"; //设置文本
//网页(将标签认定为文本)
document.write(el.innerHTML);
el.innerHTML = "<p>宝宝</p>";
C:设置样式
①:style(直接设置样式)
<div id="myA">宝宝</div>
//JS代码
var el = document.getElementById("myA");
el.style.color = "yellow";
el.style.fontSize = "100px";
②:className(可以重复利用样式、提前准备样式)
//提前准备CSS样式
<style>
.color{
color:red;
font-size:100px;
}
</style>
<div id="myA">宝宝</div>
//JS代码
var el = document.getElementById("myA");
el.className = "color";
D:获取样式
<div id="myA">宝宝</div>
①:第一种方式(针对行级元素)
var color = document.getElementById("myA").style.backgroundColor;
alert(color);
②:第二种方式(针对IE6-8浏览器)
var cartList = document.getElementById("myA");
var color = document.defaultView.getComputedStyle(cartList, null).width;
alert(color);
③:第三种方式(针对IE浏览器)
var cartList = document.getElementById("myA");
var color = cartList.currentStyle.width;
alert(color);
第五章(DOM):
A:获取节点
/
/根据ID获取节点
var el = document.getElementById("ID的名称");
//根据标签名称获取节点(返回数组)
var el = document.getElementsByTagName("标签名称");
//根据属性名称获取节点(返回数组)
var el = document.getElementsByName("属性名称");
//根据类名获取节点(返回数组)
var el = document.getElementsByClassName("类名");
B:操作节点
//获取和设置节点属性
var name = el.getAttribute("属性名称"); //获取属性
el.setAttribute("属性名称","属性值"); //设置属性
//创建节点(注意看JS、JQuery)(**)
var el = document.createElement("节点名称");
//插入节点
选中节点.appendChild(el); //将el节点插入到选中节点最后一个子节点
父节点.insertBefore(节点A,节点B); //将节点A插到节点B前面
//替换节点
父节点.replaceChild(新节点,旧节点); //将新节点替换旧节点
//删除节点
父节点.removeChild(选中的子节点);
//复制节点
节点.cloneNode(true或者false); //true代表复制子节点
第六章:
A:创建对象
内置对象(直接new出来) 自定义对象
①基于Object方式来创建对象
var obj = new Object();
obj.name = "宝宝"; //属性
obj.show = function(){
console.log("执行方法");
}
//调用方法
obj.show();
②基于字面量方式来创建对象
var obj = {
name:"宝宝",
show:function(){
console.log("执行方法");
}
}
//调用方法
obj.show();
B:简单工厂模式
function createStu(name){
var obj = new Object();
obj.name = name;
obj.show = function(){
console.log("执行方法"+name);
}
return obj;
}
//使用工厂模式调用方法
var stu1 = createStu("宝宝");
stu1.show(); //调用方法
C:构造函数
function Student(name){ this.name = name; this.show = function(){ console.log("执行方法"+name); } } //调用方法 var stu1 = new Student("打光棍"); stu1.show();
D:原型对象(prototype)
function Student(){} Student.prototype.name = "宝宝"; Student.prototype.show = function(){ console.log("执行方法"+name); } //调用方法 var stu1 = new Student(); stu1.show();
E:继承与借用构造函数
function People(name){ this.name=name; } funcation Child(){ People.call(this); //借用构造函数(继承属性) age:18; } Child.prototype=new PeoPle(); //继承方法
第七章
A:let和const
let:
let命令的作用域只局限于当前代码块 let命令声明的变量作用域不会被提前(暂时性死区) 在相同作用域下不能声明相同的变量名
const:
用于声明一个只读常量,声明之后常用的值无法更改 const命令的作用域只局限于当前代码块 注意:const声明对象时,对象不可更改,但是对象的属性可以更改
B:解构赋值
let[a,b,c]=[1,2,3] //a=1,b=2,c=3
结构嵌套赋值
let [a,[b],c]=[1,[2],3] //a=1,b=2,c=3
不完全解构
let [a,b]=[1,2,3] //a=1,b=2
解构默认值
let[a,b=5]=[1] //a=1,b=5;
剩余运算符(只能放在最后)
let [a,...b]=[1,2,3,4,5] //a=1,b=[2,3,4,5]
C:对象解构(查找属性名称)
let {a,b} = {a:"张三",b:"李四"};
let {a} = {c:"张三"}; //查找名称
D:函数默认值
function foo(x,y='world'){
console.log(x,y);
}
默认值参数要放到最后,设置了默认值参数,不能有同名变量
E:箭头函数
(如果方法体里面只有一条语句,{}可以省略)
let f1 = () => console.log("宝宝最帅");
let f2 = (x) => console.log("您的幸运数字为:"+x);
let f2 = (x,y) => console.log("和为:"+(x+y));
参数只有一个时,可以省略圆括号,没有参数时,不可省略圆括号
第八章
A:模板字符串(``)反引号
let name = "Bob",time = "today";
document.write(`Hello ${name},how are you ${time}?`);
B:字符串拓展方法
str.includes(需要查找的字符)
str.startsWith(需要查找头部字符)
str.endsWith(需要查找尾部字符)
str.repeat(查找字符出现几次)
str.padStart(总长度,补全字符串) 用于头部补全
str.padEnd(总长度,补全字符串) 用于尾部补全
str.trimLeft() //去除左边空格
str.trimRight() //去除右边空格
C:数组的扩展
1:拓展运算符...,可以将一个数组转化为用逗号分隔的序列
2:Array.from方法可以将类数组对象或可遍历的对象转换成一个真正的数组。
但是必须有length属性,而且属性必须为字符串数字
3:数组遍历的方法
keys() 键名的遍历
values() 键值的遍历
entries() 键值对的遍历
<script>
//定义数组
var names = ["豆腐干","大猪蹄","螺蛳粉","羊肉串"];
//遍历键 names.keys()===下标0,1,2,3
for (var key of names.keys()) {
console.log(key);
}
//遍历值 names.values()==="豆腐干"
for (var value of names.values()) {
console.log(value);
}
//遍历键值对
for (var kv of names.entries()) {
console.log(kv);
}
</script>
D:对象拓展和遍历
1:对象复制、合并、解构赋值
<script>
let a1 = {a:2};
let b1 = {b:4};
let c1 = {c:6};
Object.assign(a1,b1,c1); //将b1c1对象加入到a1对象里面
console.log(a1);
let a2 = {a:2,b:9};
let b2 = {b:14,c:67};
let c2 = {c:98,d:89};
Object.assign(a2,b2,c2); //将b2c2对象加入到a2对象里面
//后面的重名的会覆盖前面重名的
console.log(a2);
//其他类型的值不在首参数
const v1 = 'abc';
const v2 = true;
const v3 = 10;
const obj = Object.assign({},v1,v2,v3);
console.log(obj);
</script>
2:Object.is()和Object.assign()
<script>
let num1 = +0;
let num2 = -0;
console.log(num1===num2); //true
console.log(Object.is(num1,num2)); //false
//对象的合并
let stu1 = {a:1};
let stu2 = {b:2};
let stu3 = {c:9};
Object.assign(stu3,stu1,stu2);
console.log(stu3);
//如果有属性重名的情况(后来者居上)
let stu4 = {a:7,b:8};
let stu5 = {b:3,c:7};
let stu6 = {c:8,d:3};
Object.assign(stu6,stu4,stu5);
console.log(stu6);
const v1 = "你";
const v2 = "好";
const v = Object.assign({},v1,v2);
console.log(v); //0,好
</script>
3:对象遍历
<script>
//定义对象
let stu = {name:"羊肉串",age:16,address:"湖南邵阳"};
//遍历键(属性名称)--name、age、address
console.log(Object.keys(stu)); //遍历对象的键
//遍历值(属性值)--"螺蛳粉"、16、"湖南邵阳"
console.log(Object.values(stu)); //遍历值
//遍历键值对(名称-值)--name-"螺蛳粉",age-16,address-"湖南邵阳"
console.log(Object.entries(stu)); //遍历键值对
let xiaohei = {name:"小黑",color:"黑色",age:2};
let xiaohuang = {name:"小黄",address:"湖南娄底"};
//后面的覆盖前面的
console.log(Object.assign(xiaohei,xiaohuang));
</script>
E:Set对象
<script>
let nums1 = [1,2,3,4,5,2,3,4];
let set1 = new Set(nums1);
console.log(set1); //自动去重
let nums2 = [1,2,3,4];
let nums3 = [2,3,4,5];
let set2 = new Set([...nums2,...nums3]);
console.log(set2);
let set3 = new Set();
set3.add(1);
set3.add(2);
set3.add(2);
console.log("长度:"+set3.size+",");
console.log(set3); //1,2
set3.delete(1); //删除指定元素
console.log("查找是否有2"+set3.has(2));
set3.clear(); //清空集合中所有的元素
console.log(set3);
let set4 = new Set(["大陈豪","小陈豪","李智宇"]);
//遍历键
for (let key of set4.keys()) {
console.log(key);
}
//遍历值
for (let value of set4.values()) {
console.log(value);
}
//遍历键值对
for (let kv of set4.entries()) {
console.log(kv);
}
</script>
F:Map对象
<script> //定义一个Map集合 let map01 = new Map([ ["name","宝宝"],["age",19] ]); console.log(map01.get("name")); console.log(map01.get("age")); //根据名称来获取值 //定义Map集合 let map02 = new Map(); map02.set("湘","湖南"); map02.set("豫","河南"); map02.set("冀","河北"); console.log(map02.get("湘")); //遍历键keys forof for (let key of map02.keys()) { console.log(key); } //遍历值values for (let v of map02.values()) { console.log(v); } //遍历键值entries for (let kv of map02.entries()) { console.log(kv); } </script>
第十章:
A:JQuery及优势
轻量级、强大的选择器、出色的浏览器兼容性 开源、完善的文档
B:JQuery工厂函数
$(document).ready(function(){}) $(function(){})
C:JQuery选择器
①基本选择器
id选择器 $("#id") class $(".class") 元素 $("标签") * $("*") 并集 $("a,b")
②层次选择器
后代 $("div p") 子代 $("div>p") 相邻兄弟(之后) $("div+p") 同辈兄弟(之后) $("div~p")
③过滤选择器(可能会考:表格的隔行变色**)
基本过滤选择器
第一个 $("div:first") 最后一个 $("div:last") 取反 $("div:not(.p)") 奇数 $("div:odd") $("tr:odd").css() 偶数 $("div:even") $("tr:even").css() 根据下标选择 $("div:eq(1)") 根据下标选择大于 $("div:gt(1)") 根据下标选择小于 $("div:lt(1)")
属性选择器(*)
[属性名称] $("[name]") [属性名称=属性值] $("[name=uname]") [属性名称^=属性值开头] $("[name^=u]") [属性名称$=属性值结尾] $("[name$=e]") [属性名称*=属性值包含] $("[name*=uname]") [属性名称!=属性值取反] $("[name!=uname]")
D:JQuery让渡$符号
第一套:默认名称 jQuery
jQuery.noConflict(); //工厂函数 jQuery(function(){ document.write("你好,我叫jQuery <br>"); })
第二套:自定义名称 $j
var $j = jQuery.noConflict(); $j(function(){ document.write("你好,我叫$j"); })
第十一章:
A:DOM操作分为三类(*)
DOM-Core、HTML-DOM、CSS-DOM
B:节点操作
查找节点(略)
创建节点
var el = $("<p>肖军杰</p>");
插入节点(**)
插入内部(作为子节点)
父节点.append(el); //插入后面 父节点.prepend(el); //插入前面
插入外部(作为同辈节点)
节点.after(el); //插到后面 节点.before(el); //插到前面
删除节点
节点.remove(); //删除节点(不保留事件) 节点.detach(); //删除节点(保留事件) 节点.empty(); //清空节点
复制节点
节点.clone(true|false);
替换节点
$(A).replaceWith(B) 表示用B替换A $(A).replaceAll(B) 表示用A替换B
C:属性操作
①获取和设置元素属性
var val = $("#myA").attr("src"); $("#myA").attr("src","img/kaikai.jpg"); $("#myA").attr({"src":"img/kaikai.jpg","alt":"凯凯"});
②删除元素属性
$("#myA").removeAttr("src");
D:节点遍历
①遍历子元素
节点.children();
②遍历同辈元素
节点.next() 相邻下一个 节点.prev() 相邻上一个 节点.slibings() 同辈兄弟(除自己)
③遍历前辈元素
节点.parent() 父级元素 节点.parents() 祖先级元素
④其他遍历方法
节点.each(function(index,element){});
E:内容操作
var html = 节点.html(); //可以识别html标签 节点.html("<p>凯凯</p>"); var text = 节点.text(); //只识别文本 节点.text("凯凯");
F:获取和设置元素的value属性值可以使用val()方法
var value = 节点.val(); //获取value属性值 节点.val("凯凯"); //设置value属性值
G:设置和获取样式
节点.css("样式名称"); //获取样式 节点.css("样式名称","样式值"); 节点.css({"样式名称1":"样式值1","样式名称2":"样式值2"});
H:追加和移除样式、切换与判断
①:追加样式(需要提前准备好css样式) 节点.addClass("样式名称"); ②:移除样式 节点.removeClass("样式名称"); 节点.removeClass("样式名称1 样式名称2"); ③:切换样式(结合了addClass和removeClass) 节点.toggleClass(样式名称); ④:判断样式 节点.hasClass("classname");
第十二章:
A:基础事件
①:鼠标
click //鼠标单击事件 dblclick //鼠标双击事件 mouseover //鼠标移入事件 mouseout //鼠标移出事件
②:键盘
keyDown //键盘按下 keyPress //键盘按下未释放 keyUp //键盘松开
③:表单事件
focus() //获取焦点 blur() //失去焦点 change() //文本发生改变 submit() //表单提交
B:绑定和解绑事件
①:绑定事件
节点.on("事件类型","事件处理函数");
例如: // $("ul") 是 li的父级元素 $("ul").on("mouseover","li",function(){ $(this).css("background-color","red"); });
②:解绑事件
节点.off("事件类型"); //补充:如果不写事件类型、则移除全部事件
C:复合事件
①:hover(鼠标进入,鼠标出来)--相当于mouseenter()与mouseleave()的组合 节点.hover(function(){},function(){}); ②:toggle()--不带参数(配合事件使用)--相当于show()和hide()的结合 节点.click(function(){ 节点.toggle(); });
D:动画
①显示和隐藏
节点.show("slow"); //单位:毫秒、显示 节点.hide(3000); //隐藏
②淡入和淡出
fadeIn(3000); //淡入(显示) fadeOut(3000); //淡出(隐藏)
③上拉和下拉
slideUp(3000); //上拉(隐藏) slideDown(3000); //下拉(显示)