文章目录
预备知识与后续知识及项目案例
HTML入门与进阶以及HTML5
CSS基础知识以及CSS3
JavaScript基础语法
jQuery入门基础
Node.js + Gulp 知识点汇总
MongoDB + Express 入门及案例代码
Vue全面知识点速查
为什么要学jquery
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>首页</title>
<style>
div {
height: 100px;
margin-top: 10px;
}
</style>
</head>
<body>
<input type="button" value="设置边框" id="btnOne"/>
<input type="button" value="设置文本" id="btnTwo"/>
<div></div>
<div></div>
<div></div>
</body>
</html>
<!-- 需求:点击按钮给三个div设置边框和文本 -->
使用javascript开发过程中,有许多的缺点:
- 查找元素的方法单一,麻烦。
- 遍历数组很麻烦,通常要嵌套一大堆的for循环。
- 有兼容性问题。
- 想要实现简单的动画效果,也很麻烦
- 代码冗余。
<script>
//入门函数
window.onload = function(){
//1.先要获取对应的元素
var btnOne=document.getElementById("btnOne");
var btnTwo=document.getElementById("btnTwo");
var divs=document.getElementsByTagName("div");
//2.给btnOne按钮设置点击事件
btnOne.onclick=function(){
for(var i=0;i<divs.length;i++){
divs[i].style.border='1px solid red';
}
}
//3.给btnTwo按钮设置点击事件
btnTwo.onclick=function(){
for(var i=0;i<divs.length;i++){
divs[i].textContent="我是设置的文本";
}
}
}
//再来一个入门函数
// window.οnlοad=function(){
// console.log("我又是一个入口函数");
// }
</script>
//1.不能添加多个入口函数(window.onload),如果添加了多个,后面的会把前面的给覆盖
//2.原生js的api名字都太长太难记
//3.原生js有的时候代码冗余
//4.原生js中有些属性或者方法,有浏览器兼容问题。
//5.原生js容错率比较低,前面的代码出了问题,后面的代码执行不了
jQuery介绍
JavaScript 库
JavaScript库:即 library,是一个封装好的特定的集合(方法和函数)。从封装一大堆函数的角度理解库,就是在这个库中,封装了很多预先定义好的函数在里面,比如动画animate、hide、show,比如获取元素等。
简单理解: 就是一个JS 文件,里面对我们原生js代码进行了封装,存放到里面。这样我们可以快速高效的使用这些封装好的功能了。
比如 jQuery,就是为了快速方便的操作DOM,里面基本都是函数(方法)。
常见的JavaScript 库:jQuery、Prototype、YUI、Dojo、Ext JS、移动端的zepto等,这些库都是对原生 JavaScript 的封装,内部都是用 JavaScript 实现的,我们主要学习的是 jQuery。
jQuery的概念
jQuery总体概况如下 :
-
jQuery 是一个快速、简洁的 JavaScript 库,其设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。
-
j 就是 JavaScript; Query 查询; 意思就是查询js,把js中的DOM操作做了封装,我们可以快速的查询使用里面的功能。
-
jQuery 封装了 JavaScript 常用的功能代码,优化了 DOM 操作、事件处理、动画设计和 Ajax 交互。
-
学习jQuery本质: 就是学习调用这些函数(方法)。
-
jQuery 出现的目的是加快前端人员的开发速度,我们可以非常方便的调用和使用它,从而提高开发效率。
jQuery的优点
- 轻量级。核心文件才几十kb,不会影响页面加载速度。
- 跨浏览器兼容,基本兼容了现在主流的浏览器。
- 链式编程、隐式迭代。
- 对事件、样式、动画支持,大大简化了DOM操作。
- 支持插件扩展开发。有着丰富的第三方的插件,例如:树形菜单、日期控件、轮播图等。
- 免费、开源。
体验jquery的使用
/*
* 1. 查找元素的方法多种多样,非常灵活
* 2. 拥有隐式迭代特性,因此不再需要手写for循环了。
* 3. 完全没有兼容性问题。
* 4. 实现动画非常简单,而且功能更加的强大。
* 5. 代码简单、粗暴。
* */
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script>
//入口函数
$(document).ready(function(){
//设置边框
$('#btnOne').click(function(){
$('div').css('border','1px solid red');
});
//设置文本
$('#btnTwo').click(function(){
$('div').text('我是设置的文本');
});
})
//新的入口函数
$(document).ready(function(){
consoloe.log("我又是一个入口函数");
})
//jquert的优点:
//1.是可以写多个入口函数的
//2.jQuery的api名字都容易记忆
//3.jQuery代码简洁(隐式迭代)
//4.jQuery帮我们解决了浏览器兼容问题
//5.容错率较高,前面的代码出现了问题,后面的代码不受影响
</script>
-
jQuery设计的宗旨是’Write Less,Do More’,即倡导写更少的代码,做更多的事情。
-
它封装的方法优化了HTML文档操作、事件处理、动画设计和Ajax交互 ,极大地简化了JavaScript 编程
-
jQuery的核心特性可以总结为:
- 具有独特的链式语法和短小清晰的多功能接口;
- 具有高效灵活的css选择器,并且可对CSS选择器进行扩展;
- 拥有便捷的插件扩展机制和丰富的插件。
- jQuery兼容各种主流浏览器
jquery到底是什么
jQuery的官网 http://jquery.com/
各个版本的下载:https://code.jquery.com/
jQuery就是一个js库,使用jQuery的话,会比使用JavaScript更简单。
What is jQuery?
jQuery is a fast, small, and feature-rich JavaScript library.
It makes things like HTML document traversal and manipulation,
event handling, animation, and Ajax
much simpler with an easy-to-use API that works across a multitude of browsers.
With a combination of versatility and extensibility,
jQuery has changed the way that millions of people write JavaScript.
js库:把一些常用到的方法写到一个单独的js文件,使用的时候直接去引用这js文件就可以了。
(animate.js、common.js)
我们知道了,jQuery其实就是一个js文件,里面封装了一大堆的方法方便我们的开发,其实就是一个加强版的common.js,因此我们学习jQuery,其实就是学习jQuery这个js文件中封装的一大堆方法。
jquery的版本问题
官网下载地址:http://jquery.com/download/
jQuery版本有很多,分为1.x 2.x 3.x
1.x和2.x版本jquery都不再更新版本了,现在只更新3.x版本。
大版本分类:
- 1.x版本:能够兼容IE678浏览器
- 2.x版本:不能兼容IE678浏览器
- 3.x版本:不能兼容IE678浏览器,更加的精简(在国内不流行,因为国内使用jQuery的主要目的就是兼容IE678)
关于压缩版compressed和未压缩版uncompressed:
- jquery-1.12.4.min.js:压缩版本,适用于生产环境,因为文件比较小,去除了注释、换行、空格等东西,但是基本没有颗阅读性。
- jquery-1.12.4.js:未压缩版本,适用于学习与开发环境,源码清晰,易阅读。
jquery的入口函数
使用jQuery的三个步骤:
- 引入jQuery文件
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
- 入口函数
$(document).ready(function(){
});
- 功能实现
即找到你要操作的元素(jQuery选择器),去操作他(给他添加属性,样式,文本…)
$(document).ready(function(){
$('div').width(100).height(100).css('backgroundColor','red').text('哈哈'); //链式编程
});
关于jQuery的入口函数:
//第一种写法:繁琐,但是也可以实现
$(document).ready(function() {
... // 此处是页面DOM加载完成的入口
});
//第二种写法:简单易用
$(function() {
... // 此处是页面 DOM 加载完成的入口
});
总结:
- 等着 DOM 结构渲染完毕即可执行内部代码,不必等到所有外部资源加载完成,jQuery 帮我们完成了封装。
- 相当于原生 js 中的 DOMContentLoaded。
- 不同于原生 js 中的 load 事件是等页面文档、外部的 js 文件、css文件、图片加载完毕才执行内部代码。
- 更推荐使用第二种方式。
jQuery入口函数与js(window.onload)入口函数的对比:
-
执行时机不同:jQuery入口函数要快于window.onload
- JavaScript的入口函数要等到页面中所有资源(包括图片、文件)加载完成才开始执行。
- jQuery的入口函数只会等待文档树加载完成就开始执行,并不会等待图片、文件的加载。
-
window.onload入口函数不能写多个,但是jQuery的入口函数是可以写多个的
$(function(){
alert("我是jQuery入口函数");
});
window.onload = function(){
alert("我是window.onload");
});
jQuery中的顶级对象
1、 $ 是什么?
如果报错:$ is not defined,就说明没有引入jQuery文件
$(function(){
});
2、jQuery文件结构
其实是一个自执行函数
(function(){
window.jQuery = window.$ = jQuery;
}());
3、
a.引入一个js文件,是会执行这js文件中的代码的.
console.log(num);//10
b.jQuery文件是一个自执行函数,执行这个jQUERY文件中的代码,其实就是执行这个自执行函数.
c.这个自执行文件就是给window对象添加一个jQuery属性和$属性.
console.log(window);
d.$其实和jQuery是等价的,是一个函数.
console.log(window.jQuery === window.$);//true
console.log(Object.prototype.toString.call($));//'[object Function]'
4.$是一个函数
参数传递不同,效果也不一样.
4.1 如果参数传递的是一个匿名函数-入口函数
$(function(){
});
4.2 如果参数传递的是一个字符串-选择器/创建一个标签
$('#one');
$('<div>啦啦,我是一个div</div>');
4.3 如果参数是一个dom对象,那他就会把dom对象转换成jQuery对象.
$(dom对象);
总结:
- $是 jQuery 的别称,在代码中可以使用 jQuery 代替,但一般为了方便,通常都直接使用 $ 。
- $是jQuery的顶级对象,相当于原生JavaScript中的 window。把元素利用$包装成jQuery对象,就可以调用jQuery 的方法。
jq对象和dom对象(重要)
- DOM对象:使用JavaScript中的方法获取页面中的元素返回的对象就是dom对象。(原生js选择器获取到的对象)
特点:只能调用dom方法或者属性,不能调用jQuery的属性或方法。
var div1 = document.getElementsById("one");
div1.style.backgroundColor = 'red'; //dom对象是可以调用dom的属性或方法
div1.css('backgroundColor','green');
//报错了 div1.css is not a function,因为dom对象不能抵用jQuery属性或方法
- jQuery对象:jquery对象就是使用jquery的方法获取页面中的元素返回的对象就是jQuery对象。(利用jQuery选择器获取到的对象)
特点:只能调用jQuery的属性或者方法,不能调用原生Jsdom对象的属性或者方法。
var $div1 = $('#one');
$div1.css('backgroundColor','green');//jQuery对象是可以调用jQuery的方法
$div1.style.backgroundColor = 'red';//报错 Cannot set property 'backgroundColor' of undefined
- jQuery对象其实就是DOM对象的包装集包装了DOM对象的集合(伪数组)
var div1 = document.getElementsById("one");
console.log(div1);//<div id="one"></div>
var $div1 = $('#one');
console.log($div1);//jQuery.fn.init[div#one,context:document,selector:"#one"]
console.log($div1.__proto__===Array.prototype);//false,jQuery是一个伪数组
- DOM对象与jQuery对象的方法不能混用。
DOM 对象与 jQuery 对象之间是可以相互转换的。因为原生js 比 jQuery 更大,原生的一些属性和方法 jQuery没有给我们封装. 要想使用这些属性和方法需要把jQuery对象转换为DOM对象才能使用。
DOM对象转换成jQuery对象:【联想记忆:花钱】
// 1.DOM对象转换成jQuery对象,方法只有一种
var box = document.getElementById('box'); // 获取DOM对象
var jQueryObject = $(box); // 把DOM对象转换为 jQuery 对象
console.log(jQueryObject);
jQuery对象转换成DOM对象:
//2.jQuery 对象转换为 DOM 对象有两种方法:
var $li = $("li");
//第一种方法(推荐使用)
// 2.1 jQuery对象[索引值]
var domObject1 = $('div')[0];
console.log(domObject1);
// 2.2 jQuery对象.get(索引值)
var domObject2 = $('div').get(0);
console.log(domObject2);
注意:
只有 jQuery 对象才能使用 jQuery 方法,DOM 对象则使用原生的 JavaScirpt 方法。
总结:实际开发比较常用的是把DOM对象转换为jQuery对象,这样能够调用功能更加强大的jQuery中的方法。
案例:开关灯
<body>
<button>开灯</button>
<button>关灯</button>
<img src="images/xx.jpg"/>
</body>
<script src="jquery-1.12.4.js"></script>
<script>
$function(){
//需求:给按钮们添加事件:设置body的背景色
//1.获取到按钮们
var btns = document.getElementsByTagName("button");
//console.log(btns);
//2.给关灯按钮设置点击事件
//dom
btn[1].onclick = function(){
$('body').css('backgroundColor','black');
}
//3.给开灯按钮设置点击事件
//jquery
$(btns[0]).click(function(){
$('body')[0].style.backgroundColor = 'white';
});
});
</script>
设置获取文本内容text()
<body>
<input type="button" value="获取" id="getBtn"/>
<input type="button" value="设置" id="setBtn"/>
<div id="div1">我是一个div标签
<p>我是一个p标签<span>span1</span></p>
</div>
<div id="div1">我是一个div2标签
<p>我是一个p2标签<span>span2</span></p>
</div>
</body>
<script src="jquery-1.12.4.js"></script>
<script>
$(function(){
//text(); 获取和设置文本的
//1.获取文本: text()方法不给参数
$('#getBtn').click(function(){
//1.1 获取id为div1这个标签的文本
//会获取到这个标签中所有的文本,包括后代元素的文本
console.log($('#div1').text());
//1.2 获取标签为div的元素的文本
//包含了多个dom元素的jQuery对象,通过text()方法获取文本,会把所有dom元素的文本获取到
console.log($('div').text());
});
//2.设置文本: text()方法给参数,参数就是要设置的文本
$('#setBtn').click(function(){
//2.1 给id为div1的这个标签设置文本
//会覆盖它原来的内容,如果设置的文本中包含标签,是不会把这个标签给解析出来的
$('#div1').text('我是新设置的文本');
$('#div1').text('我是新设置的文本<a>我是连接</a>');
//2.2 给标签为div的元素设置文本
//包含了多个dom元素的jQuery对象,通过text()方法设置文本,会把所有的dom元素都设置上。
$('div).text('设置的文本'); //隐式迭代
});
});
</script>
设置获取样式css
- 功能:设置或者修改样式,操作的是style属性
- 操作单个样式
//name:需要设置的样式名称
//value:对应的样式值
$obj.css(name,value);
//使用案例
$('#one').css('background','gray');//将背景色修改为灰色
- 设置多个样式
//参数是一个对象,对象中包含了需要设置的样式名和样式值
$obj.css(obj);
//使用案例
$('#one').css({
'background':'gray',
'width':'400px',
'height':'200px'
});
- 获取样式
//name:需要获取的央视名称
$obj.css(name);
//案例
$('div').css('background-color');
注意:获取样式操作只会返回第一个元素对应的样式值。
隐式迭代:
- 设置操作的时候,如果是多个元素,那么给所有的元素设置相同的值
- 获取操作的时候,如果是多个元素,那么值会返回第一个元素的值
<style>
#div1{
height: 200px;
background-color: pink;
border: 2px solid red;
}
</style>
<body>
<input type="button" value="获取" id="getBtn"/>
<input type="button" value="设置" id="setBtn"/>
<div id="div1" style="width:200px"></div>
<div id="div2" style="width:300px"></div>
<div id="div3" style="width:400px"></div>
</body>
<script src="jquery-1.12.4.js"></script>
<script>
$(function(){
//css()方法: 设置/获取样式
//1.获取样式:css()方法设置参数为要获取的样式名
$(#getBtn').click(function(){
//1.1 获取id为div1这个元素的样式
console.log($('#div1').css('width'));
console.log($('#div1').css('height'));
console.log($('#div1').css('background-color'));
console.log($('#div1').css('backgroundColor'));
console.log($('#div1').css('border'));
//在ie浏览器中,要获取边框这样的样式值,一定要记得给一个准确的边框。
console.log($('#div1').css('border-top-width'));
//1.2 获取标签为div的元素们的样式
//获取包含了多个dom元素的jQuery对象的样式,只能获取到第一个dom对象的样式
console.log($('div').css('width')); //200px
});
//2.设置样式:css()方法要给样式名和样式值
//设置的样式是行内样式
$('#setBtn').click(function(){
//2.1 给id为div1的这个元素设置样式
//设置单样式
$('#div1').css('width','300px');
$('#div1').css('height','300');
$('#div1').css('backgroundColor','red');
$('#div1').css('border','10px solid green');
//设置多样式
$('#div1').css({
width:300,
'height':'300px',
'background-color':'green',
'border':10px solid red'
});
//2.2 给标签为div的元素们设置样式
$('div').css({
width:300,
'height':'300px',
'background-color':'green',
'border':10px solid red',
'margin-top':10px
});
});
});
</script>
jquery选择器
什么是jQuery选择器
- jQuery选择器是jQuery为我们提供的一组方法,让我们更加方便的获取到页面中的元素。
注意:jQuery选择器返回的是jQuery对象。 - jQuery选择器有很多,基本兼容了CSS1到CSS3所有的选择器,并且jQuery还添加了很多扩展性的选择器。
【查看jQuery文档】 - jQuery选择器虽然很多,但是选择器之间可以相互替代,就是说获取一个元素,你会有很多种方法获取到。
所以我们平时真正能用到的只是少数的最常用的选择器。
基本选择器
$("选择器") // 里面选择器直接写 CSS 选择器即可,但是要加引号
名称 | 用法 | 描述 |
---|---|---|
ID选择器 | $(“#id”); | 获取指定ID的元素 |
全选选择器 | $(‘*’); | 获取所有元素 |
类选择器 | $(“.class”); | 获取同一类class的元素 |
标签选择器 | $(“div”); | 获取同一类标签的所有元素 |
并集选择器 | $(“div,p,li”); | 使用逗号分隔,只要符合条件之一就可。 |
交集选择器 | $(“div.redClass”); | 获取class为redClass的div元素 |
总结:跟css的选择器用法一模一样。
层级选择器
层级选择器最常用的两个分别为:后代选择器和子代选择器。
名称 | 用法 | 描述 |
---|---|---|
子代选择器 | $(“ul>li”); | 使用>号,获取儿子层级的元素,注意,并不会获取孙子层级的元素 |
后代选择器 | $(“ul li”); | 使用空格,代表后代选择器,获取ul下的所有li元素,包括孙子等 |
总结:跟css的选择器用法一模一样。
基础选择器和层级选择器案例代码
<body>
<div>我是div</div>
<div class="nav">我是nav div</div>
<p>我是p</p>
<ul>
<li>我是ul 的</li>
<li>我是ul 的</li>
<li>我是ul 的</li>
</ul>
<script>
$(function() {
console.log($(".nav"));
console.log($("ul li"));
})
</script>
</body>
过滤选择器
名称 | 用法 | 描述 |
---|---|---|
:eq(index) | $(“li:eq(2)”).css(“color”, ”red”); | 获取到的li元素中,选择索引号为2的元素,索引号index从0开始。 |
:odd | $(“li:odd”).css(“color”, ”red”); | 获取到的li元素中,选择索引号为奇数的元素 |
:even | $(“li:even”).css(“color”, ”red”); | 获取到的li元素中,选择索引号为偶数的元素 |
总结:这类选择器都带冒号
筛选选择器(方法)
筛选选择器,顾名思义就是在所有的选项中选择满足条件的进行筛选选择。常见如下 :
名称 | 用法 | 描述 |
---|---|---|
children(selector) | $(“ul”).children(“li”) | 相当于$(“ul>li”),子类选择器 |
find(selector) | $(“ul”).find(“li”); | 相当于$(“ul li”),后代选择器 |
siblings(selector) | $(“#first”).siblings(“li”); | 查找兄弟节点,不包括自己本身。 |
parent() | $(“#first”).parent(); | 查找父亲 |
eq(index) | $(“li”).eq(2); | 相当于$(“li:eq(2)”),index从0开始 |
next() | $(“li”).next() | 找下一个兄弟 |
prev() | $(“li”).prev() | 找上一次兄弟 |
:first | $(‘li:first’) | 获取第一个li元素 |
:last | $(‘li:last’) | 获取最后一个li元素 |
:odd | $(‘li:odd’) | 获取到的li元素,选择索引号为奇数的元素 |
:even | $(‘li:even’) | 获取到的li元素,选择索引号为偶数的元素 |
总结:筛选选择器的功能与过滤选择器有点类似,但是用法不一样,筛选选择器主要是方法。
案例代码
<body>
<ul>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
</ul>
<ol>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
</ol>
<script>
$(function() {
$("ul li:first").css("color", "red");
$("ul li:eq(2)").css("color", "blue");
$("ol li:odd").css("color", "skyblue");
$("ol li:even").css("color", "pink");
})
</script>
</body>
知识铺垫
- jQuery 设置样式
$('div').css('属性', '值')
- jQuery 里面的排他思想
// 想要多选一的效果,排他思想:当前元素设置样式,其余的兄弟元素清除样式。
$(this).css(“color”,”red”);
$(this).siblings(). css(“color”,””);
- 隐式迭代
// 遍历内部 DOM 元素(伪数组形式存储)的过程就叫做隐式迭代。
// 简单理解:给匹配到的所有元素进行循环遍历,执行相应的方法,而不用我们再进行循环,简化我们的操作,方便我们调用。
$('div').hide(); // 页面中所有的div全部隐藏,不用循环操作
- 链式编程
// 链式编程是为了节省代码量,看起来更优雅。
$(this).css('color', 'red').sibling().css('color', '');
【案例:下拉菜单】
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">