JQuery是目前最流行的JavaScript程序库,是对JS对象和函数的再封装。实现与JS代码相同效果的情况下代码更加简洁。
与引入JS文件方式一致。
<script src="js/jquery-3.4.1.min.js">script>
<script>
/*
工厂函数 $() :将DOM对象转化为jQuery对象
选择器 selector:获取需要操作的DOM 元素(没错,用法基本上和css一致 )
方法action():jQuery中提供的方法,其中包括绑定事件处理的方法“$”等同于“ jQuery ”
*/
$(selector).action();
script>
示例说明:
//DOM对象转jQuery对象
var a = document.getElementById("name"); // a是DOM对象
var b = $(a); // b是jQuery对象
//jQuery对象转DOM对象
var a = $("#name"); // a是jQuery对象
var b = jqObject.get(0); // b是DOM对象
基本选择器包括标签选择器、类选择器、ID选择器、并集选择器、交集选择器和全局选择器
<h2>赛博朋克h2>
<h2 class="head2">蒸汽朋克h2>
<p>祖国万岁p>
<p id="np">核平洛圣都,自由美利坚p>
<div class="head2">CyperPunk2077div>
<script src="js/jquery-3.4.1.min.js">script>
<script>
$("p").css("color","red");//标签选择器
$(".head2").css("color","yellow");//类选择器
$("#np").css("color","blue");//ID选择器
//并集选择器
$("h2,div").css("font-family","隶书");//所有的h2、div标签字体样式都变为隶书
//交集选择器
$("div,h2,.head2").css("color","darkcyan");//选取class为head2的h2标签
script>
<body>
<h2>一代天骄h2>
<p>成吉思汗p>
<div id="ancestor">
<p>后代1p>
<p>后代2p>
<div>
<p>呦呦鹿鸣p>
div>
<span>后代3span>
div>
<p>世界之大,无奇不有p>
<script src="js/jquery-3.4.1.min.js">script>
<script>
$("#ancestor p").css("color","red");//后代选择器
// $("#ancestor>p").css("color","yellowgreen");//子代选择器
// $("h2+p").css("color","blue");//相邻元素选择器
// $("h2~p").css("color","pink");//h2之后所有的同辈p元素(不包括h2)
script>
body>
鼠标悬停复合事件:
hover()方法相当于mouseover与mouseout事件的组合
鼠标连续点击事件:
toggle()可以模拟鼠标的连续单击事件
<script>
//单个事件
$(".del").on('click', function() {
alert('hello');
})
//多个事件
$(".del").on('click mouseover', function() {
alert('hello');
})
script>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
div{
width: 300px;
height: 350px;
background: darkcyan;
outline: 2px yellowgreen solid;
}
style>
head>
<body>
<button id="b1">显示button>
<button id="b2">隐藏button>
<button id="b3">动画button>
<div>
div>
<script src="js/jquery-3.4.1.min.js">script>
<script>
$("#b2").click(function(){
$("div").hide(1000);
});
$("#b1").click(function(){
$("div").show(1000);
});
$("#b3").click(function(){
$("div").toggle(3000);
});
script>
body>
html>
链是允许我们在同一个元素上在一条语句中运行多个jQuery方法,可以把动作/方法链接在一起 ;
示例(摘自拉勾教育)
例如:点击一次按钮,让div完成4个指定动作
<style>
div{
width: 200px;
height: 200px;
background-color: black;
color:white;
font-size: 3em;
}
style>
<body>
<button>试试button>
<div>hellodiv>
<script src="js/jquery-3.4.1.min.js">script>
<script>
$("button").click(function(){
$("div").css("background-
color","pink").css("color","green").slideUp(1000).slideDown(1000);
});
script>
body>
节点操作的一些常用方法和使用,通过以下图片进行演示:
<body>
<button>添加button>
<table border="1" cellspacing="0">
<tr>
<td>序号td>
<td>名称td>
<td>价格td>
<td>数量td>
tr>
<tr>
<td>1td>
<td>倚天屠龙记td>
<td>39.9td>
<td>2td>
tr>
<tr>
<td>2td>
<td>射雕英雄传td>
<td>77.99td>
<td>2td>
tr>
<tr>
<td>3td>
<td>雪山飞狐td>
<td>39.99td>
<td>3td>
tr>
table>
<script src="js/jquery-3.4.1.min.js">script>
<script>
$("button").click(function(){
var node1=$("afasfa ");//利用工厂函数获取或创建节点
var node2=$("金庸小说全集
");
//添加节点
// $("table").append(node1);
// node2.appendTo("table");
// $("table").prepend(node1);
// node2.prependTo("tr:last");
//插入同辈节点
// $("table").after(node2);//在table后加入 node2
// node2.insertAfter("table");//将node2添加至table后面
// $("table").before(node2);
// node2.insertBefore("table");
//替换节点
// $("tr").replaceWith(node2);
// node2.replaceAll("tr");
//复制节点并将其添加至最后一行的后面
// $("tr:even").clone().insertAfter("tr:last");
//删除节点
// $("td").empty();//清空节点的文本
// $("td").remove();//移除指定节点
}
);
script>
body>
<p><button>测试button>p>
<ul>
<li>ali>
<li>
<b>bb>
li>
<li>cli>
ul>
<script src="js/jquery-3.4.1.min.js">script>
<script>
$("button").click(function(){
//var x = $("b").parent().html(); // 找爸爸
//var x = $("b").parents("ul").html(); // 找祖宗 ul
//var x = $("b").parents("body").html(); // 找祖宗 body
alert( x );
});
script>
<button>测试button>
<p>p1p>
<ul>
<li>ali>
<li>
<b>bb>
li>
<li>cli>
ul>
<p>p2p>
<p id="x">p3p>
<script src="js/jquery-3.4.1.min.js">script>
<script>
$("button").click(function(){
//var x = $("ul").next().text(); // 紧邻的下一个元素
//var x = $("ul").prev().text(); // 紧邻的上一个元素
//var x = $("ul").siblings("#x").text(); // 所有的兄弟中,id=x的
var arr = $("ul").siblings(); // ul的所有兄弟,1个button,3个p,2个script
for(var i = 0 ;i< arr.length ;i++){
alert(arr[i]);
}
});
script>
后代是子、孙、曾孙等等
<button>测试button>
<ul>
<li>ali>
<li>bli>
<li>cli>
ul>
<script src="js/jquery-3.4.1.min.js">script>
<script>
$("button").click(function(){
//var x = $("ul").children().text(); //所有子节点:abc
var x = $("ul").children("li:first").text(); //ul中的第一个子节点
alert(x);
});
script>
<button>测试button>
<ul>
<li>盘古li>
<li>蚩尤li>
<li>刑天li>
ul>
<script src="js/jquery-3.4.1.min.js">script>
<script>
$("button").click(function(){
//var x = $("li").first().text(); // 第一个li
//var x = $("li").last().text(); // 最后一个li
//var x = $("li").eq(1).text(); // 下标为1的li
//var x = $("li").not("li:eq(1)").text(); // 除了下标为1的其余所有li
var x = $("li").parent().is("ul"); // 返回布尔型,li的父节点是不是ul
alert(x);
});
script>
如果你是前端程序员,你不懂得像PHP、Python或Ruby等动态编程语言,然后你想创建自己的服务,那Node.js是一个非常好的选择。Node.js 是运行在服务端的 JavaScript,如果你熟悉Javascript,那么你将会很容易的学会Node.js。当然,如果你是后端程序员,想部署一些高性能的服务,那么学习Node.js也是一个非常好的选择。
本部分内容本人也是第一次学习,所以不做过多画蛇添足的事情,实例代码和知识点梳理均摘自拉勾教育。
{
var a = 0; // var声明的变量是全局变量
let b = 0; // let声明的变量是局部变量
}
console.log(a);
console.log(b); //b is not defined:b没有定义
// var可以声明多次
// let只能声明一次
var m = 1;
var m = 2;
let n = 3;
let n = 4; //SyntaxError: Identifier 'n' has already been declared(语法错误:n已
经声明过了)
console.log(m);
console.log(n);
// var 声明的变量会全局存储
// let 声明的变量只能在执行后才存储
console.log( x ); //没有报错,输出:undefined
var x = "苹果";
console.log(y); //y is not defined(y没有定义)
let y = "香蕉";
var arr = [1,2,3];
// 传统的js
let a = arr[0];
let b = arr[1];
let c = arr[2];
console.log(a,b,c);
//es6的解构
var [x,y,z] = arr;
console.log(x,y,z);
var user = {
username : "吕布",
weapon:"方天画戟",
horse:"赤兔马"
};
// 传统的js
let mingzi = user.username;
let wuqi = user.weapon;
let zuoji = user.horse;
console.log("姓名:"+mingzi+",武器:"+wuqi+",坐骑:"+zuoji);
//es6的解构
let {
username,weapon,horse} = user; // 注意:解构的变量名必须是对象中的属性
console.log("姓名:"+username+",武器:"+weapon+",坐骑:"+horse);
//输出即以多行形式显示,而不用加传统的换行符\n
let str = `hello,
你俩在哪呢?
心情不好,出来喝点啊!`;
console.log(str);
要注意的是用单引号而不是双引号
let name = `吕布`;
let age = 24;
// 传统的拼接字符串
var info1 = "我叫:"+ name +",我今年"+age+"岁!";
console.log(info1);
// ES6的拼接字符串
var info2 = `我叫:${
name},我明年${
age+1}岁!`;
console.log(info2);
function test(){
return "吃喝玩乐";
}
let str = `悲催的人生,从${
test()}开始`;
console.log( str );
ES6中可以使用变量名作为属性名
let name = `吕布`;
let age = 28;
//传统
let user1 = {
name : name,
age : age
};
console.log(user1);
//es6新语法中的简写
let user2 = {
name,age};
console.log(user2);
// 传统
let user1 = {
say : function(){
console.log("大家好!");
}
};
user1.say();
//es6
let user2 = {
say(){
console.log("大家好啊!");
}
};
user2.say();
语法:拓展运算符 {…} 将参数对象中所有可以遍历的属性拿出来,然后拷贝给新对象
let user1 = {
name:"项羽",
age:34
};
let user2 = {
...user1}; // 深拷贝(克隆)
console.log(user1);
console.log(user2);
//两个对象合并为一个对象
let user1 = {
name:"项羽",
age:34
};
let user2 = {
head:"诸葛亮"};
let user = {
...user1,...user2};
console.log( user );
设定了默认参数的值 的情况下,传入不同的值,显示的结果:
可以看到除了age参数传入null时显示的age为null以外,未传参数的测试输出都会赋予默认值。undefined和java中声明变量但未赋值类似。
function test(name , age = 18){
console.log(`我叫${
name},我今年${
age}岁`);
}
test("吕布",33); //我叫吕布,我今年33岁
test("貂蝉"); //我叫貂蝉,我今年18岁
test("关羽",null); //我叫关羽,我今年null岁
test("马超",""); //我叫马超,我今年岁
test("张飞",undefined); //我叫张飞,我今年18岁
//不定参数
function testArgs( ...arg ){
console.log(`传入了${
arg.length}个参数`);
for(var i = 0 ;i<arg.length;i++){
console.log(arg[i]);
}
}
testArgs(1);
testArgs(1,2);
testArgs(1,2,3,4,5,6);
testArgs();
testArgs("郭","嘉",28);
学过Java的会发现JS的箭头函数与Java8新特性中的lambda表达式很相似,这里找了一篇其他博主的文章,以供参考学习。JS中的箭头函数表达式与Java8的lambda表达式的异同
以下为箭头函数的实例代码:
// 传统
var f1 = function(a){
return a*10;
}
console.log( f1(10) );
// es6
var f2 = a=>a*10;
console.log( f2(20) );
// 当箭头函数一个参数时,()可以省略
// 当箭头函数没有参数或者有多个参数,要用()括起来
// 当箭头函数的函数体有多行语句,用{}括起来,表示代码块
// 当只有一条语句,并且需要返回时,可以省略{},结果会自动返回
var f3 = (a,b) => {
let sum = a+b;
return sum;
}
console.log( f3(3,7) );
// 可以将f3进行简化
var f4 = (a,b) => a + b;
console.log( f3(11,22) );
//user.js
function addUser(name){
return `保存${
name}成功!`;
}
function removeUser(id){
return `删除${
id}号用户!`;
}
// 声明模块并导出
// module.exports={
// save:addUser,
// delete:removeUser
// }
// 声明模块导出的简写
module.exports={
addUser,
removeUser
}
//test.js
let user = require("./user.js"); //引入user模块
console.log( user );
let result1 = user.addUser("吕布");
let result2 = user.removeUser(101);
console.log(result1);
console.log(result2);
如果你不想暴露模块当中的变量名字,可以通过as来进行操作:
//user.js
let name = "老孙";
let age = 66;
let fn = function(){
return `我是${
name}!我今年${
age}岁了!`;
}
// 声明模块并导出
export{
name as a,
age as b,
fn as c
}
//test.js
//1.只使用其中的变量
import {
a,b,c} from "./user.js";
console.log(a);
console.log(b);
console.log( c() );
//2.也可以接收整个模块
import * as info from "./user.js"; // 通过*来批量接收,as来指定接收的名字
console.log(info.a);
console.log(into.b);
console.log( into.c() );
可以将所有需要导出的变量放入一个对象中,然后通过default export进行导出
/*****************导出****************************/
export default{
name:"老孙",
eat(){
return "吃点啥!";
}
}
/*****************导入****************************/
import p from "./person.js";
console.log( p.name, p.eat() );
如果导入的多个文件中,变量名字相同,即会产生命名冲突的问题,
为了解决该问题,ES6为提供了重命名的方法,当你在导入名称时可以这样做:
/*******************student1.js**************************/
export let name = "我是来自student1.js";
/*******************student2.js************************/
export let name = "我是来自student2.js";
/*******************test_student.js************************/
import {
name as name1} from './student1.js';
import {
name as name2} from './student2.js';
console.log( name1 ); // 我是来自student1.js
console.log( name2 ); // 我是来自student2.js
//user.js
let name = "老孙";
let age = 66;
let fn = function(){
return `我是${
name}!我今年${
age}岁了!`;
}
// 声明模块并导出
export{
name,
age,
fn
}
//test.js
import {
name,age,fn} from "./user.js"
console.log(name);
console.log(age);
console.log(fn);
运行test.js,报错:SyntaxError: Unexpected token { (语法错误,在标记"{"的位置 )原因是node.js并不支持es6的import语法,我们需要将es6转换降级为es5!
接下来要介绍的就是用于将ES6代码转化为ES5代码,从而在现有的环境中执行。这意味着,你可以现在就用 ES6 编写程序,而不用担心现有环境是否支持
npm install --global babel-cli
npm init -y
"presets": ["es2015"],
"plugins": []
}
npm install --save-dev babel-preset-es2015
babel user.js --out-file .\dist\user.js
babel user.js -o .\dist\user.js
node .\dist\test.js