JS(决定了网页中标签的功能及动态效果)

2023-12-20 16:40

本文主要是介绍JS(决定了网页中标签的功能及动态效果),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、JS

(1)特点:(实现网页的交互)

        1)基于对象:(区别于面向对象),可以通过对象调用方法 obj.fn()

        2)事件驱动:网页文档中的HTML标签事件触发JS代码执行

        3)解释型:边解释边执行(不会先对网页进行编译生成中间文件)

        4)脚本语言:JS不会独立运行,依赖于网页文件(HTML文件)

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>JS初体验</title><style type="text/css">.btnStyle{width: 200px;height: 35px;background: lightcoral;border: 0px;color: white;border-radius: 4px;font-weight: bold;}</style><script type="text/javascript">// 函数function test(){//弹窗alert("Hello World!");var m = 10/0;}</script></head><body><input type="button" value="测试按钮" class="btnStyle" onclick="test()"></body>
</html>

(2)作用:

        1)动态改变网页中HTML标签的属性

        2)动态改变网页中HTML标签的样式

        3)对用户输入的数据进行合法性校验(格式检查)

        4)动态操作网页中的HTML标签(增、删、改)

        5)实现页面数据的异步通信(在不阻塞页面加载和用户交互的情况下,与服务器进行数据交换)

不能做什么:

        1)虽然JS是在用户的浏览器中执行,但是JS不能访问用户的本地文件

        2)JS不能操作来自不同服务的网页文档

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>JS作用</title><script type="text/javascript">// 函数function test() {//操作HTML标签的属性document.getElementById("img1").width = 200;document.getElementById("img1").height = 200;//操作HTML标签的样式document.getElementById("img1").style.borderRadius = "50%";//移出HTML标签(DOM操作)document.getElementById("img1").remove();}</script></head><body><img id="img1" src="imgs/img1.jpg"><br><input type="button" value="测试按钮"  onclick="test()"></body>
</html> 

(3)位置:

         1)写在body中(常用)、body后、head中

         2)在外写个js文件,在head里面调用

2、script标签可以引用一个js标签,也可以自定义js代码实现

        1)引用js文件的话必须是双标签

        2)script标签用来引用js文件之后,当前script标签就不能再自定义js代码

        3)如果引用js文件,还要进行自定义js代码实现,需要重新写一个script标签

3、js需要通过事件触发才执行

6、变量用var,可以存任何类型

7、引用数据类型: {} 对象、 []数组

  (1)对象可以随时添加

        {}表示对象类型,js对象的属性名可以直接定义,并且对象的属性支持扩展

                var stu = {stuNum:"1001",stuName:"王二狗"};
                stu.stuGender = "男";

   (2)定义学生数组

数组 var arr1 = new Array();

var arrays=[{"uid":14,"uname":"张三"},{"uid":15,"uname":"张三"}]

8、null用于清空一个变量的值

9、=== 表示绝对等于(值和类型都相同)

10、for循环、for(v in stu)循环

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>JS流程控制</title></head><body><button onclick="testFor()">测试for循环</button><button onclick="testForIn()">测试forIn</button><script type="text/javascript">function testFor(){for(var i=0;i<3;i++){console.log(i);}}//遍历JS对象和数组function testForIn(){var stu = {stuNum:"1001",stuName:"张三",stuGender:"男"};for(j in stu){// 遍历对象的属性名+值console.log(j+":"+stu[j]);}var arr = ["aaa","bbb","ccc"];for(i in arr){//遍历数组的索引和值console.log(i+":"+arr[i]);}}</script></body>
</html>

11、throw创建自定义错误/错误信息

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>错误处理</title></head><body><button onclick="testError()">测试错误处理</button><script type="text/javascript">function testError(){try{console.log("----------try");var m  =10;var n = 2;if(n !=0){var k = m/n;}else{throw "n的值不能为0";}console.log("k的值为:"+k);}catch(e){//TODO handle the exceptionconsole.log(e);}finally{console.log("----------finally");}}</script></body>
</html>

12、js中如果是局部变量的话他会变量提升,将变量的声明提升至最前面

13、创建对象

(1)通过{}创建

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>JS对象</title></head><body><button onclick="testObj()">通过{}创建js对象</button><script type="text/javascript">function testObj(){var obj = {id:"1001",name:"张三",test1:function(){console.log("test1");}};console.log(obj);console.log(obj.id);console.log(obj.name);obj.test1();}</script></body>
</html>

(2)自定义JS构造函数 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>JS对象</title></head><body><button onclick="testObj2()">使用构造函数创建js对象</button><script type="text/javascript">//自定义JS构造函数function Student(num,name){// this.stuNum = "1001";// this.stuName = "张三";//定义属性this.stuNum = num;this.stuName = name;//定义方法this.method1 = function(a){console.log("Student----method1:"+a);}this.method2 = myMethod2;}function myMethod2(){console.log("Student----method2");}function testObj2(){var s1 = new Student("1001","张三");console.log(s1);s1.method1("wahhha");s1.method2();var s2 = new Student("1002","李四");console.log(s2);s2.method1("hhehheeh");}</script></body>
</html>

14、扩展属性

        对象扩展属性:s1.stuGender = “男”,

        构造器扩展属性:Student.prototype.stuGender="男"://( 需要另外输出
                console.log(s1.stuGender);因为tostring没照顾到新的属性)

15、JavaScript提供的构造器:

16、String:

var str1 = "Hello,World";
 var str2 = new String("你好"); 

charAt("str")、split、indexOf、lastIndexOf、substring、substr(起始,个数)、toUpperCase、toLowerCase、正则表达式

正则表达式:

                var str3 = "13030303300";var reg = "^1[3,5,7,9]\\d{9}$";var b = str3.match(reg);console.log(b);

注意:利用String的match函数进行正则校验,b匹配的话返回本身,不匹配返回null

17、正则表达式:RegExp

        1)test

        function testRegExp(){var str = "13030303300";var reg = new RegExp("^1[3,5,7,8]\\d{9}$");var b = reg.test(str);console.log(b);}

注意:test匹配返回true,不匹配返回false

/d匹配任意数字、/s 空白字符、/b单词边界、/u???? 匹配unicode字符

a+至少一个a、a* 0-n个a、a? 0-1个a、a{m}m个a、a{m,n} m-n个a

18、Math:

        1)常量  var e = Math.E、 var p = Math.PI;

        2)静态数学函数:Math.random、Math.round(四舍五入)、Math.floor(只舍不入,获取比参数小的最大整数)、Math.ceil(只入不舍,获取大于等于参数的最小整数)、Math.abs获取绝对值、Math.sqrt获取平方根

19、Array:长度可变,可以存储多种数据类型

数组的定义:

 1)通过构造器创建

var arr2 = new Array("aaa","bbb");

2)静态初始化数组​​​​​​​

var arr3 = ["aaa","bbb","ccc"];
var arr1 = new Array();
arr1[0] = "aaa";
arr1[1] = "bbb";

添加元素,数组长度=最大下标+1

        3)遍历:for循环、forin循环

    for(var i in arr){console.log(arr[i]);}
arr.join("-")把数组里面的元素用-穿起来
arr.slice(2,4)截取数组,起末,左闭右开
arr.reverse()反转数组

20、Date

var date = new Date();console.log(date);不好理解的时间
 var year = date.getYear();距离1900年的时间
var year = date.getYear()+1900;正确的2023
var year1 = date.getFullYear();2023
var month = date.getMonth()+1;月份
var d = date.getDate();20号
var hour = date.getHours();21点
var min = date.getMinutes();59分
var sec = date.getSeconds();2秒
var ms = date.getMilliseconds();获取毫秒
var day = date.getDay();获取星期几 星期五
                date.setFullYear(2029);
                date.setMonth(11);
                date.setDate(28);
 set设置时间:2029年12月28号
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>内置对象Date</title></head><body><button onclick="testDate()">测试Date</button><script type="text/javascript">function testDate(){var date = new Date();//不好理解的时间console.log(date);// set设置时间:2029年12月28号date.setFullYear(2029);date.setMonth(11);date.setDate(28);//距离1900年的时间// var year = date.getYear();//正确的2023var year = date.getYear()+1900;//2023var year1 = date.getFullYear();//月份var month = date.getMonth()+1;//20号var d = date.getDate();//21点var hour = date.getHours();//59分var min = date.getMinutes();//2秒var sec = date.getSeconds();//获取毫秒var ms = date.getMilliseconds();//获取星期几 星期五var day = date.getDay();console.log(year);console.log(year1);console.log(month);console.log(d);console.log(hour);console.log(min);console.log(sec);console.log(ms);console.log(day);}</script></body>
</html>

21、function:

        全局对象(预定义的对象),全局函数直接调用,也可以用window调用

parseInt将字符串转整数
parseFloat将字符串转为浮点数
encodeURI对网址的参数部分进行编码(特殊符号和中文)
decodeURI对编码后的网址进行解码
escape对字符串中的特殊符号和中文进行编码
unescape对字符串中的特殊符号和中文进行解码

var jsonStr = "{stuNum:'1001',stuName:'张三'}"; 

eval("("+jsonStr+")");

将满足json格式的字符串转换成JS对象

对象:var s1 = {stuNum:'1001',stuName:'张三'}; 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>function</title></head><body><button onclick="testFunction()">测试按钮</button><script type="text/javascript">function testFunction(){var str1 = "3.14";var i = parseFloat(str1);var url = "http://www.qfedu.com/?param=中华有我";//对网址的参数部分进行编码(特殊符号和中文)var  newUrl =  encodeURI(url);//对编码后的网址进行解码var url2 = decodeURI(newUrl);// console.log(newUrl);// console.log(url2);var str2 = "My name is 王大力";//对字符串中的特殊符号和中文进行编码var s = escape(str2);//对字符串中的特殊符号和中文进行解码var s1 =  unescape(s)// console.log(s1);//对象var s1 = {stuNum:'1001',stuName:'张三'};// console.log(s1);//当一个字符串满足JS中对象的格式(JSON格式),可以通过eval转换成对象模式var jsonStr = "{stuNum:'1001',stuName:'张三'}";// 将满足json格式的字符串转换成JS对象var stu =  eval("("+jsonStr+")");var stu =  window.eval("("+jsonStr+")");console.log(stu.stuName);// console.log(jsonStr.stuNum);}</script></body>
</html>

22、clog快速打出console.log

23、BOM浏览器对象模型

24、BOM对象模型

(1) BOM对象属性: 

 window.navigator看浏览器类型(safari、chrome)
window.screen设备的屏幕
window.location地址栏
window.history历史记录
window.document文档内容 JS代码
                //看浏览器类型(safari、chrome)var v = window.navigator;//设备的屏幕var s = window.screen;//地址栏var  l = window.location;//历史记录var h = window.history;//文档内容 JS代码var a = window.document;

25、BOM-window对象

(1)属性:

        1)浏览器窗口属性:

window.name = "w1";设置当前浏览器窗口的名字
window.status="🌟";设置当前浏览器窗口的状态栏
window.closed获取当前窗口是否关闭

var h = window.innerHeight;

var w = window.innerWidth;

获取浏览器的内部高/宽度
var oh = window.outerHeight;
var ow = window.outerWidth;
获取浏览器的外部高/宽度
                //设置/获取当前浏览器窗口的名字window.name = "w1";//设置/获取当前浏览器窗口的状态栏window.status="🌟";//获取当前窗口是否关闭window.closed//获取浏览器的内部高/宽度var h = window.innerHeight;var w = window.innerWidth;//获取浏览器的外部高/宽度var oh = window.outerHeight;var ow = window.outerWidth;

        2)窗口对象属性:

window.self指的是自己
window.parent父容器
window.top祖先容器

26、弹窗函数

alert("请注意,倒车!");弹窗,无返回值
confirm("确定删除吗?");有返回值,点击确定才返回true,其他false
prompt("请输入生日:");
var s =window.prompt("请输入生日:","2023");
有返回值,点击确定返回内容,否则返回null,2023这个是设置默认值
                //无返回值window.alert("请注意,倒车!");//有返回值,点击确定才返回true,其他falsevar s = window.confirm("确定删除吗?");//有返回值,点击确定返回内容,否则返回null// var s =window.prompt("请输入生日:");//2023这个是设置默认值var s =window.prompt("请输入生日:","2023");console.log(s);

27、窗口函数      

  2)关闭打开窗口函数:

var w = window.open(URL,"度",features,true);参数1:新打开的窗口显示的网址
 参数2:新打开的窗口的名字
参数3:新打开的窗口的属性
 参数4:是否替换当前窗口 Tru为替换
 返回值:打开的窗口对象
	var URL = "https://www.baidu.com";//参数1:新打开的窗口显示的网址//参数2:新打开的窗口的名字//参数3:新打开的窗口的属性//参数4:是否替换当前窗口 Tru为替换// 返回值:打开的窗口对象// var w = window.open(URL);// var w =window.open(URL,"百度")var features = "width = 200,height = 100";// var w =window.open(URL,"百度",features);var w = window.open(URL,"百度",features,true);console.log(w.name);

         3)窗口操作函数:

var w = window.open("https://www.baidu.com","百度官网","width=300,height=300",true);
w.resizeTo(800,600);把宽高修改为800,600
w.resizeBy(800,600);把宽高额外增加800,600
w.moveTo(200,100);将窗口移动到指定位置 距左200 距上100
w.moveBy(200,100); 将窗口在原基础上再移动 左200 上100
window.scrollTo(200,300);滚动滚动条(针对当前窗口的滚动条操作)
window.scrollBy(-100,-200);滚动滚动条在原基础上再移动 右100 下300
var w = window.open("https://www.baidu.com","百度官网","width=300,height=300",true);//把宽高修改为800,600w.resizeTo(800,600);// 把宽高增加800,600w.resizeBy(800,600);// 将窗口移动到指定位置 距左200 距上100w.moveTo(200,100);// 将窗口在原基础上再移动 左200 上100w.moveBy(200,100);//滚动滚动条(针对当前窗口的滚动条操作)window.scrollTo(200,300);// 滚动滚动条在原基础上再移动 右100 下300window.scrollBy(-100,-200);

28、延时函数:(重)

var task1 = setTimeout(showDate, 3000);设置延迟3秒显示
clearTimeout(task1);关闭未执行的延时任务

  29、循环任务:

var task2 = setInterval(showDate, 3000);设置每3秒显示一次
clearInterval(task2);关闭循环任务

注意:window可删 直接: task2 = setInterval("showDate()", 3000);

(1)两种表示:

        var task = setInterval("show()", 1000);var task = setInterval(show, 1000);

30、 BOM-srceen:只读对象

screen.height;  screen.width;获取屏幕宽度和高度(分辨率)
screen.availHeight;screen.availWidth获取屏幕宽度和高度(除掉状态栏)
 screen.deviceXDPI; screen.deviceYDPI获取屏幕硬件一英寸的物理像素点
                //获取屏幕宽度和高度(分辨率)var h= screen.height;var w= screen.width;// alert(w+"*"+h);// 获取屏幕宽度和高度(除掉状态栏)var ah= screen.availHeight;var aw= screen.availWidth;// alert(aw+"*"+ah);// 获取屏幕硬件一英寸的物理像素点var xdpi = screen.deviceXDPI;var ydpi = screen.deviceYDPI;alert(xdpi+"*"+ydpi);

31、BOM-navigator对象:只读对象

 navigator.appName;返回浏览器的名称
navigator.appCodeName;返回浏览器的代码名
navigator.appVersion;返回浏览器的平台及版本信息
navigator.browserLanguage;返回浏览器的语言环境(看浏览器支持)
navigator.cookieEnabled;检查当前浏览器是否启用Cookie(重)
                //返回浏览器的名称var name = navigator.appName;// 返回浏览器的代码名var code = navigator.appCodeName;// 返回浏览器的平台及版本信息var version = navigator.appVersion;// 返回浏览器的语言环境(看浏览器支持)var lang = navigator.browserLanguage;// 检查当前浏览器是否启用Cookie(重)var b = navigator.cookieEnabled;console.log(b);

32、BOM-location对象(多)

  location.href;   获取地址栏完整的网址  http://127.0.0.1:8848/demo3/page19-BOM-Location.html
 location.href = "http://www.baidu.com";修改地址栏完整的网址(可以实现页面跳转)(多)
location.protocol;   获取地址栏网址的协议 http
  location.port;        获取地址栏网址的端口 8848
  location.host;           获取主机和端口号:127.0.0.1:8848
 location.hostname;/获取主机号:127.0.0.1
location.pathname;    获取路径参数demo3/page19-BOM-Location.html
  location.reload();重新载入当前网页(刷新网页)
           location.replace("http:www.baidu.com"); 使用网址替换当前地址栏的网址(实现页面跳转)
            //获取地址栏完整的网址  http://addr:port/aa?key=nalue// 					协议		主机	  端口	  端口// http://127.0.0.1:8848/demo3/page19-BOM-Location.htmlvar s1 = location.href;// 获取地址栏网址的协议 httpvar s2 = location.protocol;// 获取地址栏网址的端口 8848var s3 = location.port;//获取主机和端口号:127.0.0.1:8848var s4 = location.host;//获取主机号:127.0.0.1var s5 = location.hostname;// 获取路径参数demo3/page19-BOM-Location.htmlvar s6 = location.pathname;// 修改地址栏完整的网址(可以实现页面跳转)(多)location.href = "http://www.baidu.com";// location函数// 重新载入当前网页(刷新网页)location.reload();//使用网址替换当前地址栏的网址(实现页面跳转)location.replace("http:www.baidu.com");console.log(s6);

33、BOM-history对象:(多)

history.back();  返回上一个页面
history.forward();  切换到下一个页面
history.go(num);正前进负后退
var len = history.length;获取历史记录中网址的个数

注意:go数字代表跳几个页面,前提是有过历史记录 

34、DOM对象模型:

35、概念

(1)元素:标签以及标签所包含的内容        元素的属性:标签的属性

(2)节点:元素,属性,文本都叫做节点

(元素——标签节点,属性——属性节点,文本——文本节点)

(3)节点名称:标签节点的节点名就是标签名,属性节点的节点名就是属性名,文本节点的节点名是test

36、DOM document对象:

        指代的就是一个网页文档,他提供的属性、函数大多是为了获取网页文档中的元素

(1)集合属性:

document.all;      获取当前文档所有元素
document.images;  获取当前网页文档中所有图片
document.forms;           获取当前网页文档中的form元素
 var arr4 = document.links;获取当前网页文档中所有的链接(a,area)

         1)其他属性:

  document.body;获取当前网页文档中的body元素

 document.title; 

document.title = "千锋Java";

获取当前网页文档中的标题内容

设置当前文档的标题

document.URL;获取当前网页文档的URL
document.cookie = "key=value";
document.cookie = "key2=value2";     
向cookie中添加新的数据(累加)
document.cookie;获取cookie中缓存的内容

37、获取节点对象:document.getElementById

getElementById("img2");    根据标签的id属性获取一个标签
getElementsByName("m1");        根据标签的name属性获取多个标签(数组)
getElementsByClassName("cc");   根据标签的class属性获取一组标签(数组)
getElementsByTagName("p");根据标签名获取一组标签(数组)
        <img class="cc" src="imgs/img1.jpg" height="100"><br><img id="img2"  src="imgs/img2.jpg" height="100"><br><img name="m1" src="imgs/img3.jpg" height="100"><br><p>p1</p><p class="cc">p3</p><p>p3</p>

38、改变HTML

document.write("从前有座山<br/>");
document.write("山里有座庙");

document.writeln("山里有座庙");              


        如果执行多次write函数用的是同一个流,则输出的数据会追加
         如果执行多次write函数用的是不同的流,后面write的内容会覆盖之前的内容

 换行输出(依靠浏览器支持)

  document.open();   

打开并使用一个新的流

document.close();

关闭当前网页的输出流,关闭之后如果执行write,则会打开新的流

document.getElementById().innerHTML

获取与设置标签中间的内容(可以识别标签)

document.getElementById().innerText 

获取与设置标签中间的内容(不可以识别标签)

document.getElementById().value

获取与设置input标签输入框中值

38、获取节点对象:document.getElementById

39、对HTML标签的操作

(1)操作标签属性

            // 操作标签属性// 获取属性值var s = img.src;// 设置属性值img.src = "imgs/img3.jpg";

(2)操作标签样式

            // 操作标签样式// 设置标签的样式属性img.style.border = "2px rgba(255,0,0,0.5) solid";// 样式属性在css中以“-”分割,在js中操作要使用驼峰命名img.style.borderRadius = "50%";var m = img.style.border;console.log(m);

(3)操作标签对象的class属性

        <style type="text/css">.imgStyle{width: 200px;height: 200px;border-radius: 50%;transform: rotate(45deg);}</style>
        var img3 = document.getElementById("img3");// 标签对象的class属性 	使用className进行操作img3.className = "imgStyle";console.log(img3.class);
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style type="text/css">.imgStyle{width: 200px;height: 200px;border-radius: 50%;transform: rotate(45deg);}</style></head><body><img src="imgs/img1.jpg" height="200"> <br><img id = "img2" src="imgs/img2.jpg" height="200"> <br><img id = "img3" src="imgs/img3.jpg" height="200"> <br><button onclick="testAttrOper()">操作标签属性</button><button onclick="testStyleOper()">操作标签样式</button><button onclick="testClassOper()">操作标签class属性</button><script type="text/javascript">function testAttrOper(){var img = document.getElementById("img2");// 操作标签属性// 获取属性值var s = img.src;// 设置属性值img.src = "imgs/img3.jpg";}function testStyleOper(){var img = document.getElementById("img2");// 操作标签样式// 设置标签的样式属性img.style.border = "2px rgba(255,0,0,0.5) solid";// 样式属性在css中以“-”分割,在js中操作要使用驼峰命名img.style.borderRadius = "50%";var m = img.style.border;console.log(m);}function testClassOper(){var img3 = document.getElementById("img3");// 标签对象的class属性 	使用className进行操作img3.className = "imgStyle";console.log(img3.class);}</script></body>
</html>

40、表单校验

form_validate.js

function doValidate() {console.log("------doValidate");var userName = document.getElementById("userNameInput").value;var label1 = document.getElementById("userNameTipsLabel");//校验用户名if (userName == null || userName == "") {//进行提示label1.innerHTML = "请输入用户名!";label1.style.color = "red";return false;} else if (userName.length < 8 || userName.length > 20) {label1.innerHTML = "用户名长度必须为8-20个字符!"label1.style.color = "red";return false;} else if (!new RegExp("^[0-9a-zA-Z]*$").test(userName)) {label1.innerHTML = "用户名只允许包含数字和字母";label1.style.color = "red";return false;} else {label1.innerHTML = "用户名输入正确!";label1.style.color = "green";}// 校验密码var userPwd = document.getElementById("userPwdInput").value;var label2 = document.getElementById("userPwdTipsLabel");if (userPwd == null || userPwd == "") {//进行提示label2.innerHTML = "请输入密码!";label2.style.color = "red";return false;} else if (userPwd.length < 8 || userPwd.length > 16) {label2.innerHTML = "密码长度必须为8-16个字符!"label2.style.color = "red";return false;}else {label2.innerHTML = "密码输入正确!";label2.style.color = "green";}//校验重复输入密码var rePwd = document.getElementById("rePwdInput").value;var label3 = document.getElementById("rePwdTipsLabel");if (rePwd == null || rePwd == "") {//进行提示label3.innerHTML = "密码不能为空!";label3.style.color = "red";return false;} else if (userPwd != rePwd) {label3.innerHTML = "两次密码输入不一致!"label3.style.color = "red";return false;}else {label3.innerHTML = "重复密码输入正确!";label3.style.color = "green";}//校验手机号var userPhone = document.getElementById("userPhoneInput").value;var label4 = document.getElementById("userPhoneTipsLabel");if(userPhone == null || userPhone == "") {//进行提示label4.innerHTML = "手机号不能为空!";label4.style.color = "red";return false;}else if(!new RegExp("1[3579]\\d{9}").test(userPhone)){label4.innerHTML = "手机号只允许1开头,且中间为3579的11位数!";label4.style.color = "red";return false;}else {label4.innerHTML = "手机号输入正确!";label4.style.color = "green";}//校验邮箱var userEmail = document.getElementById("userEmailInput").value;var label5 = document.getElementById("userEmailTipsLabel");if(userEmail == null || userEmail == "") {//进行提示label5.innerHTML = "邮箱不能为空!";label5.style.color = "red";return false;}else if(!new RegExp("^[0-9a-zA-Z]{10}@qq\.com$").test(userEmail)){label5.innerHTML = "邮箱只允许10位数字或字母,且以@qq.com结尾的格式!";label5.style.color = "red";return false;}else {label5.innerHTML = "邮箱输入正确!";label5.style.color = "green";}console.log(userName);return false;
}

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>表单校验</title><script type="text/javascript" src="js/form_validate.js"></script></head><body><!-- onsubmit表单提交事件,如果返回false则不执行,返回true才执行 --><form action="https://www.baidu.com" onsubmit=" return doValidate()"><fieldset><legend>用户注册-数据校验</legend><p>账号:<input id="userNameInput" type="text" placeholder="请输入用户名"><label id="userNameTipsLabel"></label></p><p>密码:<input id="userPwdInput" type="password" placeholder="请输入密码"><label id="userPwdTipsLabel"></label></p><p>确认密码:<input id="rePwdInput"  type="password" placeholder="请再次输入密码"> <label id="rePwdTipsLabel"></label></p><p>手机号:<input id="userPhoneInput" type="text" placeholder="请输入手机号"> <label id="userPhoneTipsLabel"></label></p><p>邮箱:<input id="userEmailInput" type="text" placeholder="请输入邮箱"> <label id="userEmailTipsLabel" ></label></p><p><input type="submit" value="提交"></p></form></fieldset></body>
</html>

41、节点操作

(1)说明

        节点:元素,属性,文本都叫做节点

        节点操作:使用js完成节点的增加、插入、替换、删除

        1)节点属性:

节点类型nodeTypenodeNamenodeValue
标签节点1标签名null
属性节点2属性名属性值
文本节点3#text文本内容

        2)方法

body.attributes;获取当前标签的属性列表
div.childNodes;获取当前标签的子节点(包括标签节点,文本节点)
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>节点属性</title></head><body style="color: red;" bgcolor="green"><div id="div1">hello<h3>枫桥夜泊</h3><p>月落乌啼霜满天,</p><p>江枫渔火对愁眠。</p><p>姑苏城外寒山寺,</p><p>夜半钟声到客船。</p></div><input type="button" value="测试" onclick="test()"><script type="text/javascript">function test(){var body = document.body;// 所有标签对象的都可以调用attributes属性,获取当前标签的属性列表var attrsArr = body.attributes;// 属性节点var attrNode = attrsArr[0];console.log(attrNode.nodeType);console.log(attrNode.nodeName);console.log(attrNode.nodeValue);// 所有标签对象的都可以调用childNodes属性,获取当前标签的子节点(包括标签节点,文本节点)var div = document.getElementById("div1");var nodesArr = div.childNodes;//文本节点		var textNode = nodesArr[0];console.log(textNode.nodeType);console.log(textNode.nodeName);console.log(textNode.nodeValue);//标签节点var tagNode = nodesArr[1];console.log(tagNode.nodeType);console.log(tagNode.nodeName);console.log(tagNode.nodeValue);}</script></body>
</html>

       (2)常用方法

document.createElement("img");创建标签节点(元素)
document.createAttribute("name");创建属性节点
document.createTextNode("hello world!");创建文本节点
document.setAttributeNode(srcAttr);将属性节点添加到标签节点中
document.setAttribute("src","imgs/img2.jpg");给标签节点添加/修改属性
document.removeAttribute("alt");从标签节点上移除一个属性
document. appendChild() 建立上下级关系
 document.insertBefore()插入子节点
document. replaceChild替换子节点
document. removeChild()删除子节点

 (2)创建节点: document.createElement

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>创建新节点</title></head><body><input type="button" value="测试创建新节点" onclick="test()"></body><script type="text/javascript">function test(){// 创建标签节点(元素)var tagNode = document.createElement("img");//打印标签的内容// console.log(tagNode.outerHTML);console.log(tagNode.nodeType);console.log(tagNode.nodeName);console.log(tagNode.nodeValue);// 创建属性节点var attrNode = document.createAttribute("name");console.log(attrNode.nodeType);console.log(attrNode.nodeName);console.log(attrNode.nodeValue);// 创建文本节点var textNode = document.createTextNode("hello world!");console.log(textNode.nodeType);console.log(textNode.nodeName);console.log(textNode.nodeValue);}</script>
</html>

(3)节点的属性操作 

            // 创建标签节点var imgTag = document.createElement("img");// -----------------begin// 1、// 创建属性节点var srcAttr = document.createAttribute("src");srcAttr.nodeValue="imgs/img1.jpg";// 将属性节点添加到标签节点中imgTag.setAttributeNode(srcAttr);// -----------------end// 2、给标签节点添加/修改属性imgTag.setAttribute("src","imgs/img2.jpg");imgTag.setAttribute("width","200");imgTag.alt = "图片无法显示";// 从标签节点上移除一个属性imgTag.removeAttribute("alt");

        2)建立上下级关系 appendChild() 

//  拼接子节点  将标签节点拼接到body标签里面(最后面) var body = document.body;body.appendChild(imgTag);

        3)插入子节点 insertBefore()

        //插入子节点,将imgTag插入到body里面btnTag之前var btnTag =  document.getElementById("btn_test");body.insertBefore(imgTag,btnTag);

(3)替换子节点 replaceChild

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>替换节点</title><style type="text/css">#container{border: #F08080 2px solid;width: 400px;height: 300px;}</style></head><body><div id="container"><p>hello</p><p id="p">我是一个图片</p><p>world</p></div><img id="img3" src="imgs/img3.jpg" height="100" ><input id="btn_test" type="button" value="测试" onclick="test()"><script type="text/javascript">function test(){// 使用一个图片标签,替换div中的p标签// 创建新节点var imgTag = document.createElement("img");imgTag.src = "imgs/img1.jpg";imgTag.height=100;//获取网页中已经存在的图片标签// 如果使用网页中已经存在的标签,替换的时候A会发生移动,而不是拷贝A去替换Bvar imgTag = document.getElementById("img3");//替换子节点// 使用imgTag替换oldChildvar parentTag =  document.getElementById("container");var oldChild = document.getElementById("p");parentTag.replaceChild(imgTag,oldChild);}</script></body></html>

(4)删除子节点 removeChild() 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>替换节点</title><style type="text/css">#container{border: #F08080 2px solid;width: 400px;height: 300px;}</style></head><body><div id="container"><p>hello</p><p id="p">我是一个图片</p><p>world</p></div><img id="img3" src="imgs/img3.jpg" height="100" ><input id="btn_test" type="button" value="测试" onclick="test()"><script type="text/javascript">function test(){var div  =document.getElementById("container");var p = document.getElementById("p");// 删除自节点// 从div中删除子标签pdiv.removeChild(p);}</script></body></html>

42、事件绑定

(1)内联绑定:

在HTML标签上添加事件属性,绑定对应的js函数

        <button onclick="test1()">测试按钮1</button><script type="text/javascript">function test1(){console.log("------------test1");}</script>

(2)脚本外联绑定(推荐):

不再HTML标签上写事件属性,通过JS获取HTML元素,调用事件属性绑定JS函数

		<button id="btn2" >测试按钮2</button><script type="text/javascript">var btn2 = document.getElementById("btn2");btn2.onclick = function(){console.log("------------test2");}</script>

43、HTML常用事件

鼠标事件、键盘事件(表单标签)、window事件、监听事件

44、鼠标事件:

        用户的鼠标在HTML标签上产生点击、双击、移动、放上、离开等动作

onclick单击
ondblclick双击
onmouseover鼠标移动到HTML标签上
onmouseout鼠标从HTML标签上移走 
onmousemove鼠标在HTML标签上移动
onmousedown鼠标在HTML标签上左键按下
onmouseup鼠标在HTML标签上左键松开
onsubmit表单提交事件
<img src="imgs/img1.jpg" width="200" onclick="test1()" ><script type="text/javascript">function test1(){console.log("------test1");}</script>

表单提交:注意 false不提交 onsubmit那里直接show07()的话都会false也会提交 

<form action="index23.html" method="get" onsubmit="return show07()"><input type="text" name="uname" /><input type="submit" value="提交" /></form>
function show07() {return true;}

45、键盘事件(表单标签):

        主要是针对于表单中的输入标签

onkeydown键盘按下(未松开就一直加)
onkeyup键盘抬起
onkeypress键盘按下(未松开也就一次)

46、window事件

 window.onload = function()当网页中body标签内容加载完毕触发
 window.onunload = function()当前网页关闭或刷新时执行 用于回收资源
 window.onscroll = function()当网页发生滚动时触发执行
  window.οnresize= function()窗口的尺寸发生变化时触发
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><img src="imgs/img1.jpg" height="300"><script type="text/javascript">//当网页中body标签内容加载完毕触发window.onload = function(){console.log("------onload");}// 当前网页关闭或刷新时执行 用于回收资源window.onunload = function(){console.log("------onunload");}// 当网页发生滚动时触发执行window.onscroll = function(){console.log("------onscroll");}// 窗口的尺寸发生变化时触发window.onresize= function(){console.log("------onresize");}</script></body>
</html>

例如:(如果在HTML的head标签中通过js绑定事件,必须写在window.onload = function()中,因为不然的话找不到id=btn的标签)

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script type="text/javascript">window.onload = function(){var btn = document.getElementById("btn");btn.onclick = function(){console.log("------hello");}}</script></head><body><button id="btn">测试按钮</button></body>
</html>

47、监听事件:

键盘事件通常绑定在表单输入标签,但是表单输入标签支持的事件不止键盘事件

 onfocus当表单标签获得焦点时触发
onblur当表单标签失去焦点时触发
onchange当表单标签中的值发生变化触发(输入框输入完成失去焦点后判断)

onselect 


document.getElementById("num").onchange = function()

当输入框中输入的内容被选中时触发

select标签也支持onchange事件 

 onsubmit 绑定在form元素上,当此表单被提交时触发
onreset 绑定在form元素上,当此表单被重置时触发

 <th><input type="checkbox" id="checkall" οnchange="checkall();">全选</th>

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><input type="text" id="userName"><select id="num"><option value="1">1</option><option value="2">2</option><option value="3">3</option></select><form action="http://www.baidu.com"><input type="text"><input type="submit"><input type="reset"></form><script type="text/javascript">var userNameInputTag =  document.getElementById("userName");// 当表单标签获得焦点时触发userNameInputTag.onfocus = function(){console.log("--------test1");}// 当表单标签失去焦点时触发userNameInputTag.onblur = function(){console.log("--------test2");}// 当表单标签中的值发生变化触发(输入框输入完成失去焦点后判断)userNameInputTag.onchange = function(){console.log("--------test3");}// 当输入框中输入的内容被选中时触发userNameInputTag.onselect = function(){console.log("--------test5");}// select标签也支持onchange事件document.getElementById("num").onchange = function(){console.log("-----test4");}// 绑定在form元素上,当此表单被提交时触发document.forms[0].onsubmit = function(){console.log("---------test6");// 阻止表单提交return false;}// 绑定在form元素上,当此表单被重置时触发document.forms[0].onreset = function(){console.log("---------test7");// 阻止表单提交return false;}</script></body>
</html>

44、Event事件对象:

js将标签发生的动作抽象为事件对象、

Event对象用来描述HTML标签与发生的动作的组合

(1)获取Event对象:

        1)内联获取:使用window对象调用event属性获取触发当前JS函数的event对象

<button ondblclick="test1()">按钮</button><img src="imgs/img1.jpg" height="100" id="img""><script type="text/javascript">function test1(){// 获取当前事件对象var ev = window.event;}</script>

        2)js脚本获取:如果使用JS脚本绑定函数,也可以使用函数的参数直接获取

<img src="imgs/img1.jpg" height="100" id="img""><script type="text/javascript">var img = document.getElementById("img");img.onclick  = function(ev){console.log(ev);}</script>

(2)event对象属性:

 var tag = event.srcElement;            event对象调用srcElement,获得触发此事件的标签(<button οnclick="test1()">按钮</button>)
var type = event.type;event对象调用type属性,获取事件的类型(click)

45、事件冒泡:子标签发生的事件触发了当前标签上层父标签绑定的函数

阻止:

 event.cancelBubble = true;阻止事件冒泡
 event.stopPropagation();阻止事件冒泡
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><div id="div" style="padding: 50px; width: 100px; height: 100px; background: rgba(255,0,0,0.5);"><button id="btn">测试按钮</button><img src="imgs/img1.jpg" height="50"></div><script type="text/javascript">var div = document.getElementById("div");div.onclick = function() {console.log("-------test1");}var arr = div.childNodes;for (var i = 0; i < arr.length; i++) {var node = arr[i];if (node.nodeType == 1) {node.onclick = function(event){//阻止事件冒泡event.cancelBubble = true;}}}</script></body>
</html>

46、JSP的内置对象:

        Request对象、Response对象、out对象、session对象、application对象、PageContext对象、Config对象、Page对象、Exception对象。

47、NaN+ 任何 =NaN 无重载

48、typeof()==>用于获取变量数据类型

49、增强for里面的每个值是索引

50、οnsubmit="return checkedLogin()" 函数里面默认true

51、css写 style js写script

52、两种按钮

(1)<input type="button" value="根据id来获取" οnclick="show01()"> 验证

(2)<input type="submit" value="提交"> 必须form里面

53、getElementsByClassName("max")语法

document.getElementsByClassName("max").value 这个语句是错误的,因为 getElementsByClassName() 方法返回的是一个数组,而 value 属性是只读的,所以不能直接访问。可以通过 arrays[0].value 来访问第一个元素的 value 属性。

54、样式、属性写法

(1)样式写法:(head里面)

<style>table{border: 1px red solid;}</style>

(2)属性写法

<table style="border: 1px solid red;  "><table border="1px" cellspacing="0px" >

55、table标签举例

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style>tr th {height: 20px;}tr td {height: 50px;text-align: center;}</style></head><body><table border="1px" cellspacing="0px" width="300px"><!-- 第一行 --><tr><th>姓名</th><th>年龄</th><th>性别</th></tr><!-- 第二行 --><tr><td>小花</td><td>12</td><td>女</td></tr><!-- 第三行 --><tr><td>小淑</td><td>32</td><td>女</td></tr><!-- 第四行 --><tr><td>兰兰</td><td>20</td><td>男</td></tr><!-- 第五行 --><tr><td>倾听</td><td>23</td><td>男</td></tr></table><!-- //获取所有的行数 --><script>//得到所有的tr标签var arrays = document.getElementsByTagName("tr");for (var i = 0; i < arrays.length; i++) {//判断是否是偶数行if ((i + 1) % 2 == 0) {//是偶数行,则改变背景颜色arrays[i].style.backgroundColor = "red"}}</script></body>
</html>

56、text-align: center;也可用于表示里面的内容居中

        <style>div{background-color: gray;width: 280px;height: 60px;text-align: center;}</style></head><body><div>验证码:&nbsp;<input type="text" /><input type="button" value="确定" /></div>

57、存入数组

var nums = [];

nums.push(letter);

58、合并字符串

 var combined = nums.join('');

59、数字转成字母

  var letter = String.fromCharCode(num1);

60、table无样式标签

61、window.οnlοad=show() 启动时加载

62、js无equals 只有==

63、操作样式:节点对象.style.属性名=属性值

64、两种button

<button onclick="testFor()">我是button标签</button><input type="button" value="我是input标签下的button" />

区别:

  <button> 和 <input type="button"> 的主要区别在于 <button> 标签可以包含更多的HTML元素,并且通常用于更大的、可包含文本的按钮,而 <input type="button"> 则用于更小的按钮,并且通常只包含一个词或者短语。另外,<button> 标签在大多数浏览器中支持JavaScript事件处理程序,而 <input type="button"> 则不支持。

65、onsubmit表单提交事件,如果返回false则不执行,返回true才执行

66、onchange监听条目改变

67、方法传参

function changeCitys(index){

68、字符串多维数组

var arrays = [["昌平区","海淀区","朝阳区"],["名媛区","酒吧区","小姐姐区"],["越秀区","白云区","天河区"]];

JSON格式的数组,该数组包含两个对象

[{"uid":14,"uname":"张三"},{"uid":15,"uname":"张三"}]

69、float: left;
                margin-top: 50px;
                margin-right: 10px;

设置容器里面的标签的位置,先让他变成float的浮动布局

70、<input type="button" id="btn" />

btn.disabled = true; 设置未到时间前不能点击

71、JS绑定事件

(1)直接在标签中绑定

<button onclick="document.getElementsByTagName('p')[0].style.color='red'">
点击</button>

(2)使用函数绑定

        1)(多)

<input type="button" value="点击" onclick="showInfo()" /><script>function showInfo() {alert("热火2-1凯尔特人");}</script>

        2)(多)

<input id="tv_btn" type="button" value="点击" /><script>document.getElementById("tv_btn").onclick = function() {alert("热火2-1凯尔特人")}</script>

        3)使用提供的方法进行绑定

addEventListener("事件的名称","执行函数","执行的规则(true 由内到外触发事件,false相反)")

增加事件

removeEventListener("事件的名称","执行函数","执行的规则(true 由内到外触发事件,false相反)")

删除事件

        A.事件没有on前缀

        B.触发的函数 没有双引号 没有括号

        C.addEventListener 可以给同一个标签增加相同的事件

        D.addEventListener 可以给同一个标签增加多种不同的事件

        E.addEventListener 可以给Windows窗口对象来增加事件

<script>document.getElementById("tv_but").addEventListener("click", showInfo, true);function showInfo() {alert("哈哈哈");}</script>

72、设置里面的字体颜色的话需要 ePro.style.color = "red"; 。不能只是color

73、html里面left:'250px'没有效果,要加上position: relative;才有效果

        元素的定位属性(如lefttopposition等)需要结合起来使用才能实现定位效果。如果你只设置了left属性而没有设置position属性,那么浏览器将无法确定元素的定位参照点和定位方式,因此元素的位置不会发生变化

        相对定位元素的lefttoprightbottom属性都应该是相对于其原始位置的偏移量,而不是相对于父元素或屏幕的偏移量。如果需要将元素相对于父元素或屏幕进行定位,需要使用其他定位方式(如绝对定位、固定定位等)

74、window.οnlοad=show01(); 一开始就生成想要的结果

75、console.log("你好");没反应

        HTML代码中出现了JavaScript的console.log。这个是在浏览器控制台中打印信息的方法,它并不是HTML的一部分,而是JavaScript的一部分。

如果你想在网页上看到"你好"这个信息,你需要将console.log("你好");这行代码放入一个<script>标签内

76、随机生成验证码并校验

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style>div {background-color: grey;width: 380px;text-align: center;}a:link {text-decoration: none;color: white;font-size: 10px;}a:visited {color: white;}span {color: red;}#yzm {color: white;margin-bottom: 300px;}#ndiv{margin-bottom: 0px;}#sjyzm{font-size: 20px;}</style></head><body><div><span id="sjyzm"></span><a href="#" onclick="show01()">看不清换一张</a><form action="#"><span id="yzm">验证码:&nbsp;</span><input type="text" id="admin"/><input type="button" value="确定"  onclick="show02()"/></form></div><script>window.onload=show01();var combined = " ";/*** 生成验证码*/function show01() {//随机生成1311avar i = 0;// var num = parseInt(Math.random() * 10 + 1);var nums = [];while (i < 6) {//生成字母if (i == 5) {var num1 = parseInt(Math.random() * 58 + 66);//截取需要的范围if ((num1 >= 65 && num1 <= 90) || (num1 >= 97 && num1 <= 122)) {//转化成字母var letter = String.fromCharCode(num1);nums.push(letter);break;}}else{//生成数字var num = parseInt(Math.random() * 10);nums.push(num);i++;}}//转为字符串combined = nums.join('');//输出到验证码位置去document.getElementById("sjyzm").innerText=combined;}/*** 验证输入的内容与验证码是否相同*/function show02(){// 得到输入框的内容//得到输入框的标签var admin = document.getElementById("admin");//得到标签的内容var content = admin.value;var combined01 = String(combined);//判断if(combined01 == content){alert("输入正确!")}else{alert("输入错误!")}}</script></body>
</html>

        注意:使用String(combined)可以将combined转换为字符串类型,确保在比较时不会出现类型不匹配的问题。如果直接使用combined进行比较,可能会因为combined是数字类型而引发错误

77、设置为不可见:

78、html块状元素、行内块元素、行内元素的区别

(1)块状元素:总是开始于新的一行,占据其父元素的整个宽度

        最常见的块级元素有 <div><p><h1> 到-<h6><ol><ul><li><menu><form><section><article><header><footer>

            1)特点:

                      1、有默认的宽高,宽是父元素的100%,高度是内容所称起来的高度

                      2、宽高是可以设置的

                       3、独占一行

                       4、可以容纳其他的块状元素、行内元素、行内块元素

                        5、可以设置外边距、内边距、边框

            注意:h标签、p标签尽量的不要去容纳块状元素 

(2)行内块元素

        行内块元素不会开始新的一行,它和行内元素一样排成一行,但是它像块级元素一样有自己的宽度、高度、上下边距和左右边距(可以设置它的宽度、高度、上下内边距、上下边框

        常见的行内块级元素有 <img><input><textarea><button><select><datalist>

        1)特点:

                1、 有默认的宽高,就是自带的宽高

                 2、可以设置宽高

                 3、可以与相邻的行内元素和行内块元素在同一水平线下显示

                 4、外边距、内边距、边框都是可以设置的

​​​​​​​

(3)行内元素

​​​​​​​        行内元素不会开始新的一行,它会和其他元素排成一行。它只能包含文本或者其他行内元素

        常见的行内元素包括​​​​​​​<span><a><b><strong><em><i><sub><sup>

        1)特点: 

                    1、有默认宽高,都是内容所撑起来的

                     2、宽高设置无效

                     3、与相邻的行内元素或者行内块元素同一行上显示

                     4、可以去包含行内元素,但是不能包含块状元素及行内块元素

                   5、水平方向上的外边距和内边距是可以设置的,垂直方向无效,边框也是可以设置

 注意:a标签可以去包含块状元素以及行内元素 ,链接里面不能再放链接

(4)元素的转化

        块转行内:display:inline;

        行内转块:display:block;

        块、行内元素转换为行内块: display: inline-block;

显示问题:

document.getElementById("menu-ul").style.display="block";

        这行代码找到的元素(上一步的结果)并将其display属性设置为"block"。在CSS中,display属性决定了元素如何显示。在这种情况下,"block"意味着元素将会块级显示,也就是说它会占据一整行空间,而不是与其他元素并排显示

79、window.onload的用法

        window.onload = show();function show() {

80、diasbled的用法(不能点击)

 81、通用

        *{/* 设置取消下划线 */text-decoration: none;/* 设置不要列表前面的. */list-style-type: none;/* 设置各自的边框为0 */margin: 0px;/* 设置所有的文字为黑色 */color: black;}

82、ch.checked

    ch.checked 是 JavaScript 中 checkbox 对象的一个属性,表示 checkbox 是否被选中。当 checkbox 被选中时,ch.checked的值为 true;当 checkbox 未被选中时,ch.checked 的值为 false

这篇关于JS(决定了网页中标签的功能及动态效果)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/516721

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.