D24-JavaScript高级

第一章 BOM编程

1.1 BOM编程的概述

1.1.1 BOM编程的概念

BOM:Browser Object Model 浏览器对象模型

1.1.2 BOM 编程的作用

在这里插入图片描述

1.1 .3 BOM常用对象

BOM常用对象作用
window浏览器窗体对象
location浏览器地址栏对象
history历史记录对象

1.2 window对象

BOM的核心 对象,它表示一个浏览器的实例。
注意: 只要是window的方法和属性,window对象名都可以省略。

1.2.1 与对话框有关的方法

window中与对话框有有关的方法作用
alert(“提示信息”)弹出一个确认按钮的信息框
string prompt(“提示信息”,“默认值”)弹出一个输入信息框,返回字符串类型
Boolean confirm(“提示信息”)弹出一个信息框,有度额定和取消按钮,如果点确定,返回true,点取消返回false
<script>
    /*
    对话框
        1)警告框  window.alter('消息内容');
        2)确认框 window.confim('消息内容');确定(true) 取笑(false)
        3)输入框 window.prompt('消息内容','默认值');确定(输入的内容) 取消(null)

        window是窗口的默认对象,可以省略不写,直接调用里面的属性和方法
     */

    //window.alert('你好小娜!');
    //console.log(window.confirm('好不好?'));
    //window.confirm('好不好?');    console.log(内容):将内容输出到浏览器的控制台
    console.log(window.prompt('3x5=', '请输入内容'));

</script>

1.2.2 与计时有关的方法

window中与计时有关的方法作用
setTimeout(函数名,间隔毫秒数)在指定的时间后调用1次函数,只执行1次,单位是毫秒。
返回值:返回一个整数类型的计时器
函数调用有两种写法:
1) setTimeout(“函数名(参数)”, 1000);
2) setTimeout(函数名,1000, 参数);
注意方式二:没有引号,没有括号
setInterval(函数名,间隔毫秒数)每过指定的时间调用1次函数,不停的调用函数,单位是毫秒。
返回值:返回一个整数类型的计时器。
clearInterval(计时器)清除setInterval()方法创建的计时器
clearTimeout(计时器)清除setTimeout()方法创建的计时器

<script>
  /*
    定时器:
        1)复用性定时器
            格式:
                var number = window.steInterval('函数名()',间隔时间);根据指定的间隔时间出发函数,
                        无限循环,返回定时器编号
                var number = window.setInterval(函数名,间隔时间);根据指定的间隔时间触发函数,
                        无限循环,返回定时器编号
                window.clearInterval(number);关闭定时器
         2)一次性定时器
            格式:
                var number=window.steTimeout('函数名()',间隔时间);根据指定的间隔时间触发函数,
                        仅执行一次,返回定时器编号。
                  var number=window.steTimeout(函数名,间隔时间);根据指定的间隔时间触发函数,
                        仅执行一次,返回定时器编号。
                  window.clearTimeout(number);关闭定时器
     */
    function fun1() {
        alert('轮播图');
    }
    //复用性定时器
   //let interval= setInterval('fun1()',1000);
   let interval= setInterval(fun1,1000);

    //关闭定时器interval
    document.getElementById('myBtn1').onclick=function () {
        clearInterval(interval)
    }

    function fun2() {
        alert('广浩')
    }

    //let interval = setTimeout(fun2(),3000);

    //关闭
    document.getElementById('myBtn2').onclick = function () {
        clearTimeout(interval)
    }
    
</script>

1.2.3修改元素内容的方法和属性

名称属性
方法:doucument.getElementById(“id”)通过id得到一个元素,如果有同名的元素,则得到第一个
属性:innerHTML获得:元素内部的HTML
设置:修改元素内部的HTML
属性:innerText获得:元素内部的文本
设置:修改元素内部的纯文本,其中的html标签不起作用

1.2.4 案例:会动的时钟

案例分析:

  • 在页面创建一个h1标签,用于显示时钟,设置颜色和大小
  • 点击开始按钮调用一个方法start(),在方法内部每过一秒钟调用另一个方法begin()
  • begin()方法内部得到现在的时间,并将得到的时间显示在h1标签内部
  • 暂停的按钮调用另一个方法:push(),在方法内部清除上面setInterval()的计时器
  • 为了防止多次点开始按钮出现bug,在开始调用计时器之前清除上一个计时器。
    代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>04_会动的时钟</title>
    <style type="text/css">
        #clock{
            color:  red;
            font-size: 30px;
        }
    </style>

</head>
<body>

<h1 id="clock">我是时间</h1>
<input type="button" value="开始" onclick="start()">
<input type="button" value="暂停" onclick="pause()">

</body>
<script>
    //1)获取h1标签对象
    let clock = document.getElementById('clock');

    //2)定义函数修改对象的标签体内容为当前的系统时间
    function changeClock() {
    clock.innerText = new  Date().toLocaleString();

    }
    //声明全局变量
    var number;

    //3)点击开始触发定时器间隔1秒触发函数
    function start() {
        clearInterval(number);
        number = setInterval('changeClock()',1000);
    }
    //4)点击暂停,关闭定时器
    function pause() {
        clearInterval(number)
    }
</script>

</html>

1.3 location对象

1.3.1 location是什么?

  • 代表浏览器的地址栏对象

1.3.2 location常用的属性

href属性作用
获取href属性获得当前地址栏访问的地址
设置href属性用于页面的跳转,跳转到一个新的页面

1.3.3 location常用的方法

location的方法描述
reload()重新加载当前的页面的, 想防御浏览器上刷新按钮

代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>05_location对象</title>
</head>
<body>

</body>
<script>

    /*
    location 对象
            1)地址栏信息  location.href
            2)刷新页面 location.reload();

     */
    //当前的地址栏url路径
    console.log(location.href);
    //页面跳转
    location.href='http://www.douyu.com';

</script>
</html>

1.4 history对象

1.4.1 作用

访问浏览器之前已经访问过的页面

1.4.2 方法

方法作用
forward()类似于浏览器上前进按钮
back()类似于浏览器上后退按钮
go()go(1)前进
go(0) 刷新
go(-1) 后退

第二章 DOM编程

2.1 DOM编程概述

2.1.1 DOM编程的基本概念

Document Object Model 文档对象模型,用于操作网页中元素。

2.2 查找节点

2.2.1 查找节点的方法

获取元素的方法作用
document.getElementById(“id”)通过id属性到唯一的元素
如果页面上有多个同名的id,则得到第1个元素
document.getElementsByName(“name”)通过name属性得到一组标签,返回一个数组

2.2.2 查找节点的代码

<body>
<input type="button" value="(通过标签名)给a链接添加地址" id="b1"/>
<input type="button" value="(通过name)给div设值" id="b2">
<input type="button" value="(通过class类名)给div设值" id="b3">

<hr/>
<a href="">我爱总复习</a><br>
<a href="">我爱总复习</a><br>
<a href="">我爱总复习</a><br>
<hr>
<div name="one"></div>
<div name="one"></div>
<div name="one"></div>
<hr>
<div class="two"></div>
<div class="two"></div>
<div class="two"></div>
</body>
<script>
    //给a标签增加href属性
    document.getElementById('b1').onclick = function () {
        //获取所有A标签
        let aArray= document.getElementsByTagName('a');
        //遍历
        for(let i=0;i < aArray.length;i++){
            aArray[i].href='http://www.baidu.com';
        }
    }

    //给name = "one" 增加文本内容
    document.getElementById('b2').onclick = function () {
        //获取所有one  name
        let aArray1=document.getElementsByName('one');

        //遍历
        for(let i=0;i <aArray1.length;i++){
            aArray1[i].innerText='习复总爱我'
        }
    }
    //给class = "two" 增加文本内容
    document.getElementById('b3').onclick = function () {
        let aArray2=document.getElementsByClassName('two');

        //遍历
        for (let i=0;i<aArray2.length;i++){
            aArray2[i].innerHTML='XXXXX资源网,你值得拥有。'
        }
    }
</script>

2.2.3案例:实现全选/全不选,商品结算的功能

案例效果:
在这里插入图片描述

分析:

  1. 知识点:复选框如果要选中,设置checked = true ,取消设置checked = false
  2. 全选:通过name属性得到上面所有的复选框对象,遍历集合,将每一个元素的checked设置为true
  3. 全不选:将所有元素的checked属性设置为false
  4. 反选:原来选中的设置false,原来没选中的设置为true。
    案例代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>02_全选反选</title>
</head>
<body>
<h3>商品价格列表</h3>
<input type="checkbox" name="item" value="1500"/> 山地自行车1500<br/>
<input type="checkbox" name="item" value="200"/> 时尚女装200<br/>
<input type="checkbox" name="item" value="3000"/> 笔记本电脑3000<br/>
<input type="checkbox" name="item" value="800"/> 情侣手表800<br/>
<input type="checkbox" name="item" value="2000"/> 桑塔纳2000<br/>
<hr/>
<input type="checkbox" id="all" onclick="selectAll(this)">全选/全不选&nbsp;
<input type="button" id="reverse" onclick="reverseSelect()" value="反选"/> &nbsp;

</body>
<script>
    //绑定全选全不选事件
    function selectAll(obj) {
        let status = obj.checked;

        let intemArray = document.getElementsByName('item');

        //遍历数组, 同步状态
        for (let i in intemArray){
            intemArray[i].checked = status;
        }
    }
    //反选
    function reverseSelect() {
        //获取一组name= ‘item’复选框
        let itemArray = document.getElementsByName('item');
        //遍历数组,与之前的状态相反
        for (let i in itemArray){
            itemArray[i].checked = !itemArray[i].checked;
        }
    }
</script>
</html>

2.2.4 案例:省市级联的操作

需求: 有两个下拉列表,左边选择相应的省份,右边出现对应的城市列表
案例效果:
在这里插入图片描述

分析:

  • 创建二维数组,保存每个省份对应的城市,第1维的第0个元素是一个空数组
  • 给左边省的下拉列表添加改变事件,在事件方法中获取到当前省份所选择到的索引值。
  • 索引从0开始,索引值对应的就是该省份对应的城市数组索引,城市所有的名字是一个一维数组。
  • 先创建一个字符串,内容是:"< option> --请选择市–< option>"
  • 遍历一维城市数组,每个城市用字符串拼接成一个option字符串
  • 得到城市的下拉列表的,将上面接近的option字符串,使用innerHTML加到下拉列表中

代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>03_省市联动-拔高</title>
</head>
<body>
<div>
    <select name="" id="province">
        <option value="noChange">--请选择省份--</option>
    </select>
    <select id="city">
        <option value="noChange"> --请选择城市--</option>
    </select>
    
</div>
</body>
<script>
    // 创建数组对象
    var pList = new Array();
    // 定义二维数组
    pList['北京市'] = ['朝阳区', '东城区', '西城区', '海淀区'];
    pList['上海市'] = ['宝山区', '黄浦区', '青浦区', '南汇区'];
    pList['广东省'] = ['广州市', '佛山市', '中山市', '东莞市'];
    pList['河北省'] = ['邯郸市', '石家庄市'];
    pList['河南省'] = ['郑州市', '洛阳市'];
    pList['湖北省'] = ['武汉市', '宜昌市'];
    pList['湖南省'] = ['湖南省', '长沙市'];
    pList['陕西省'] = ['陕西省', '西安市'];
    pList['山西省'] = ['山西省', '太原市'];
    pList['黑龙江省'] = ['黑龙江省', '哈尔滨市'];
    pList['台湾省'] = ['台北市'];
    pList['其他'] = ['其他'];
    //获取数组的一维索引
    for(let i in pList){
        let province= document.getElementById('province');
        province.innerHTML += '<option value="'+i+'">'+i+'</option>'
    }
    //触发省份列表 onchenge事件
    document.getElementById('province').onchange = function () {
        //获取省份索引
        let pValue = this.value;
        let cityList = pList[pValue];
        //查询城市列表 的 select 标签
        let city = document.getElementById('city');
        //清除上一次城市列表
        city.length = 1;
        //给城市下拉列表赋值
        for(let i in cityList){
            city.appendChild(new Option(cityList[i],cityList[i]));
        }
    }
</script>
</html>

2.3 js操作css样式

2.3.1 在JS中操作css属性命名上的区别

以前css直接写死在html中, 现在可以通过js脚本去动态修改一个标签的样式。

2.3.2 方式一

元素.style.样式名 = “样式值”;

2.3.3 方式二

元素.className = “类名”;

2.3.4 JS修改CSS的示例代码

案例效果:
在这里插入图片描述

代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>04_动态修改字段样式</title>
    <style>
        .myClass{
            color: skyblue;
            font-size: 30px;
            text-align: center;
        }
    </style>
</head>
<body>
<p id="first">
    这是第一自然段
</p>
<p id="second">
    这是第二自然段
</p>
<input type="button" value="改变几个样式" onclick="changeCss()" >
<input type="button" value="改变类样式" onclick="changeClass()" >
</body>
<script>
    //直接改变css的样式
    function changeCss() {
        //获取p标签对象
      let first =  document.getElementById('first');
      //字体大小
        first.style.fontSize = '20px';
        //颜色
        first.style.color= 'red';

    }

    //结合类选择器修改样式
    function changeClass() {
        //获取p标签对象
        let  second  =document.getElementById('second');
        second.className= 'myClass';
    }
</script>
</html>

2.3.5 案例:使用JS修改表格行的背景色

需求:
使用JS修改表格的背景色,产生隔行变色的效果,鼠标移上去的时候这一行变成其他颜色,移出去,变为原来的颜色。
代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>05_隔行换色</title>
</head>
<body>
<table id="tab1" border="1" width="800" align="center">
    <caption><h1>商品分类</h1></caption>
    <tr style="background-color: #ccc;">
        <th>分类ID</th>
        <th>分类名称</th>
        <th>分类描述</th>
        <th>操作</th>
    </tr>
    <tr>
        <td>1</td>
        <td>手机数码</td>
        <td>手机数码类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td>2</td>
        <td>电脑办公</td>
        <td>电脑办公类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td>3</td>
        <td>鞋靴箱包</td>
        <td>鞋靴箱包类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td>4</td>
        <td>家居饰品</td>
        <td>家居饰品类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td>4</td>
        <td>家居饰品</td>
        <td>家居饰品类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td>4</td>
        <td>家居饰品</td>
        <td>家居饰品类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td>4</td>
        <td>家居饰品</td>
        <td>家居饰品类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
</table>
</body>
<script>
    //获取所有的tr
    let trArray = document.getElementsByTagName('tr');

    //遍历数组
    for(let i=1;i<trArray.length;i++){
        if (i %2 == 0){
            trArray[i].style.backgroundColor='lightyellow';

        }else{
            trArray[i].style.backgroundColor='skyblue';
        }
        var color;
        //鼠标移入,高亮
        trArray[i].onmouseover = function () {
            //存储之前的背景色
            color = this.style.backgroundColor
            this.style.backgroundColor = 'lightpink';
        }
        //移出 恢复
        trArray[i].onmouseout = function () {
            this.style.backgroundColor= color;
        }
    }
    
</script>
</html>

3.1 正则对象

3.1.1 创建的方式

方式一
正则表达式是一个JS中的一个类:RegExp = Regular Expression

var reg = new RegExp("正则表达式");

方式二
以/ 开头,以/ 结尾,中间的部分是正则表达式.

var  reg = /正则表达式/

两种方式的区别:

  1. 在js中,正则表达式的两种声明方式对于:“\d,\D”的匹配模式中,前者需要转义,而后者无需转义
  2. 前者支持字符串拼接,支持变量,更加灵活,;后者对于固定的表达式,书写起来方便快捷。

3.1.2 常用的方法

JS中正则表达式的方法说明
Boolean test(“字符串”)如果正则表达式匹配字符串,返回true,否则返回false
/*
        *
        *   邮箱账号:xiao-mimi_123  @  qq . com
        *               aa@163.com
        *                   cn
        *                   com
        *                   com.cn
        *   正则规则:/^ ( [a-z0-9_\.-]+ )  @ ([\da-z\.-]+) \.  ([a-z\.]{2,6})$/
        *
        *   /^正则表达式$/ 最标准的
        *
        *   () 代表一组
        *    [] 代表任意
        *    a-z 小写字母
        *    0-9 数值
        *    _
        *    \ 转义字符
        *    . 代表一个字符
        *    -
        *    + 一个或多个
        *    \d  digit 数值 0-9
        *    {2,6} 量词 至少2个,最多6个
        *
        * */

3.2 案例:校验表单

案例需求:
用户注册,需要进行如下验证,请在JS中使用正则表达式进行验证。

  1. 用户名:只能由英文字母和数字组成,长度为4~16个字符,并且以英文字母开头
  2. 密码: 大小写字母和数字6-20个字符
  3. 确认密码:两次密码要相同
  4. 电子邮箱: 符合邮箱地址的格式 /^\w+@\w+(.[a-zA-Z]{2,3}){1,2}$/
  5. 手机号:/^1[34578]\d{9}$/
  6. 生日:生日的年份在1900~2009之间,生日格式为1980-5-12或1988-05-04的形式,/^((19\d{2})|(200\d))-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2]\d|3[0-1])$/
    案例效果:
    在这里插入图片描述

代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>验证注册页面</title>
<style type="text/css">
body {
	margin: 0;
	padding: 0;
	font-size: 12px;
	line-height: 20px;
}
.main {
	width: 525px;
	margin-left: auto;
	margin-right: auto;
}
.hr_1 {
	font-size: 14px;
	font-weight: bold;
	color: #3275c3;
	height: 35px;
	border-bottom-width: 2px;
	border-bottom-style: solid;
	border-bottom-color: #3275c3;
	vertical-align: bottom;
	padding-left: 12px;
}
.left {
	text-align: right;
	width: 80px;
	height: 25px;
	padding-right: 5px;
}
.center {
	width: 280px;
}
.in {
	width: 130px;
	height: 16px;
	border: solid 1px #79abea;
}

.red {
	color: #cc0000;
	font-weight: bold;
}

div {
	color: #F00;
}
</style>
<script type="text/javascript">
//验证表单中所有的项
function checkAll () {
	//所有的方法都返回true,这个方法才返回true
	return checkUser() && checkMail();
}

//验证用户名
function checkUser () {
	//1. 创建正则表达式
	var reg = /^[a-zA-Z][a-zA-Z0-9]{3,15}$/;
	//2. 得到文本框中输入的值
	var value = document.getElementById("user").value;
	//3. 如果不匹配,在后面的span中显示错误信息,返回false
	if (reg.test(value)==false) {
		document.getElementById("userInfo").innerHTML = "用户名不正确";
		return false;
	}
	//4. 如果匹配,在后面的span中显示一个打勾图片,返回true
	else {
		document.getElementById("userInfo").innerHTML = "<img src='img/gou.png' width='15'/>";
		return true;
	}
}

//验证邮箱
function checkMail () {
	//1. 创建正则表达式
	var reg = /^\w+@\w+(\.[a-zA-Z]{2,3}){1,2}$/;
	//2. 得到文本框中输入的值
	var value = document.getElementById("email").value;
	//3. 如果不匹配,在后面的span中显示错误信息,返回false
	if (reg.test(value)==false) {
		document.getElementById("emailInfo").innerHTML = "邮箱格式不正确";
		return false;
	}
	//4. 如果匹配,在后面的span中显示一个打勾图片,返回true
	else {
		document.getElementById("emailInfo").innerHTML = "<img src='img/gou.png' width='15'/>";
		return true;
	}
}
</script>
</head>

<body>
<form action="server" method="post" id="myform" onsubmit="return checkAll()">
<table class="main" border="0" cellspacing="0" cellpadding="0">
	<tr>
		<td><img src="img/logo.jpg" alt="logo" /><img src="img/banner.jpg" alt="banner" /></td>
	</tr>
	<tr>
		<td class="hr_1">新用户注册</td>
	</tr>
	<tr>
		<td style="height:10px;"></td>
	</tr>
	<tr>
		<td>
		<table width="100%" border="0" cellspacing="0" cellpadding="0">
			<tr>
				<!-- 长度为416个字符,并且以英文字母开头 -->
				<td class="left">用户名:</td>
				<td class="center">
				<input id="user" name="user" type="text" class="in" onblur="checkUser()"/>
				<span style="color: red" id="userInfo"></span>
				</td>
			</tr>
			<tr>
				 <!-- 不能为空, 输入长度大于6个字符 -->
				<td class="left">密码:</td>
				<td class="center">
				<input id="pwd" name="pwd" type="password" class="in" />
				</td>
			</tr>
			<tr>
				<!-- 不能为空, 与密码相同 -->
				<td class="left">确认密码:</td>
				<td class="center">
				<input id="repwd" name="repwd" type="password" class="in"/>
				</td>
			</tr>
			<tr>
				<!-- 不能为空, 邮箱格式要正确 -->
				<td class="left">电子邮箱:</td>
				<td class="center">
				<input id="email" name="email" type="text" class="in" onblur="checkMail()"/>
				<span id="emailInfo" style="color: red;"></span>
				</td>
			</tr>
			<tr>
				 <!-- 不能为空, 使用正则表达式自定义校验规则,1开头,11位全是数字 -->
				<td class="left">手机号码:</td>
				<td class="center">
				<input id="mobile" name="mobile" type="text" class="in"/>
				</td>
			</tr>
			<tr>
				<!-- 不能为空, 要正确的日期格式 -->
				<td class="left">生日:</td>
				<td class="center">
				<input id="birth" name="birth" type="text" class="in"/>
				</td>
			</tr>
			<tr>
				<td class="left">&nbsp;</td>
				<td class="center">
				<input name="" type="image" src="img/register.jpg" />
				</td>
			</tr>
		</table></td>
	</tr>
</table>
</form>
</body>
</html
weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值