脚本语言:脚本语言不需要编译,直接就可以执行的语言。
javaScript是一门客户端脚本语言,该脚本会运行在客户端浏览器中(每一个浏览器)都有javaScript的解析引擎。javaScript的作用:
可以来增强用户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户的体验。 JavaScript = ECMAScript + JavaScript自己特有的属性(BOM+DOM)内部JS 定义<script>,标签体内容就是js代码 外部 定义<script>,通过src属性引入外部的js文件 notes:
<script>可以定义在html页面的任何地方。但是定义的位置会影响执行顺序。<script>可以定义多个。变量:一小块存储数据的内存空间 Java语言是强类型语言,而JavaScript是弱类型语言。 强类型:在开辟变量存储空间时,定义了空间将来存储的数据的数据类型。只能存储固定类型的数据 弱类型:在开辟变量存储空间时,不定义空间将来的存储数据类型,可以存放任意类型的数据。 语法:
var 变量名 = 初始化值;typeof运算符:获取变量的类型。 注:null运算后得到的是object
其他类型转boolean: number:0或NaN为假,其他为真 string:除了空字符串(""),其他都是true null&undefined:都是false 对象:所有对象都为true 6. 三元运算符 ? : 表达式
var a = 3; var b = 4; var c = a > b ? 1:0; 语法: 表达式? 值1:值2; 判断表达式的值,如果是true则取值1,如果是false则取值2;方法
属性 length:代表形参的个数
特点 1)方法定义时,形参的类型不用写 2)方法是一个对象,如果定义名称相同的方法,会覆盖 3)在JS中,方法的调用只与方法的名称有关,和参数列表无关 4)在方法声明中有一个隐藏的内置对象(数组),arguments,封装所有的实际参数
调用
定义字符创组成数组
单个字符:[] 如: [a] [ab] [a-zA-Z0-9_] 特殊符号代表特殊含义的单个字符: \d:单个数字字符 [0-9] \w:单个单词字符[a-zA-Z0-9_] 量词符号 ?:表示出现0次或1次 *:表示出现0次或多次 +:出现1次或多次 {m,n}:表示 m<= 数量 <= n m如果缺省: {,n}:最多n次 n如果缺省:{m,} 最少m次 开始结束符号 ^:开始 $:结束创建 1) var reg = new RegExp(“正则表达式”); 2) var reg = /正则表达式/;
方法 test(参数):验证指定的字符串是否符合正则定义的规范
练习
var reg1 = new RegExp("^\\w{6,12}$"); var reg2 = /^\w{6,12}$/ var username = "zhangsan" var b = reg1.test(username); alert(reg1); alert(reg2) alert(b)1.特点全局对象,Global对象中封装的方法不需要对象就可以直接调用。 2. 方法:
encodeURI():url编码 decodeURI():url解码 encodeURIComponent():url编码,编码的字符更多 decodeURIComponent():url解码 parseInt():将字符串转为数字 逐一判断每一个字符是否是数字,直到不是数字为止,将前边数字部分转为number isNaN():判断一个值是否是NaN NaN六亲不认,连自己都不认。NaN参与的==比较全部问false eval():讲 JavaScript 字符串,并把它作为脚本代码来执行。 URL编码 例子,练习encodeURI、 encodeURIComponent等编解码方法,并体会其中的不同。 <script> var str = "http://www.baidu.com?wd=火影忍者"; var encode = encodeURI(str); document.write(encode+"<br>"); var aaa = decodeURI(encode); document.write(aaa+"<br>"); var encode1 = encodeURIComponent(str);//此方法会将URL一起编码 document.write(encode1+"<br>"); var aaaa = decodeURIComponent(encode1); document.write(aaaa+"<br>"); var str1 = "123aaa"; var str2 = "aaa123www"; var b = parseInt(str1); document.write(b+"<br>"); var bb = parseInt(str2); document.write(bb+"<br>"); document.write(b==123); document.write("<br>") document.write(isNaN(str2)); document.write("<br>") var jsCode="alert('abc')"; eval(jsCode); </script>DOM(Document Object Model)可以说是BOM (Browser Object Model)中专门抽取来的一部分,因为浏览器对象以及其属性复杂度较高,种类繁多,所以专门需要按照一定的规则将一些对象抽取出来,组成一个全新的对象,这样DOM相关对象集就诞生了。DOM与BOM 的关系如下图所示(小面图片也是小猿从网上找的,如果有什么版权的疑问请联系小猿):
什么是BOM? BOM对象是指Browser Object Model,即浏览器对象模型 BOM对象的组成:
Window:窗口对象 Navigator:浏览器对象 Screen:显示器屏幕对象 History:历史记录对象 Location:地址栏对象 document:文档对象window对象有多种方法,可以分类介绍比较重要的对象。
与弹出框有关的方法 alert() 显示带有一段消息和一个确认按按钮的警告框。 confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。如果用户点击确定按钮,则方法返回true,如果用户点击取消按钮,则返回false。 prompt() 显示用户输入的对话框。与打开关闭有关的方法 close() 关闭浏览器,一般是谁调用我,我就关谁。 open() 打开一个新的浏览器,返回新的window对象。 部分代码演示: <body> <!--<img id="light" src="./img/off.gif">--> <input id="openBtn" type="button" value="打开窗口"> <input id="closeBtn" type="button" value="关闭窗口"> </body> <script> var openBtn = document.getElementById("openBtn"); var newwindow = this.window; openBtn.onclick = function () { newwindow = window.open("https://www.baidu.com"); } var closeBtn = document.getElementById("closeBtn"); closeBtn.onclick =function () { newwindow.close(); } </script>> 与定时器有关的方法setTimeout() 在指定的毫秒数后调用函数或计算表达式。 参数: 1. js代码或者方法对象 2. 毫秒值 3.返回值:唯一标识,用于取消定时器 该函数常见的三种应用写法:
<script> window.setTimeout('window.open("https://www.baidu.com")',5000); setTimeout("fun();",10000); /*fun=function () { window.open("https://www.52pojie.cn/"); }*/ function fun() { window.open("https://www.52pojie.cn/"); } setTimeout(fun1,15000); function fun1() { window.open("http://www.openedv.com/"); } </script>clearTimeout() 取消由 setTimeout() 方法设置的 timeout。
var timer01 = setTimeout(fun1,15000); function fun1() { window.open("http://www.openedv.com/"); } clearTimeout(timer01);setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。 与setTimeout()的最本质的区别是setTimeInterval()是重复执行,而setTimeout()则只执行一次。 clearInterval() 取消由 setInterval() 设置的 timeout。 setInterval()和clearInterval()的参数及用法与setTimeout()和clearTimeout()类似,此处不过多复习。
body里面需要定义p标签和span标签。
<p><span id="time">5</span>秒钟后自动跳转首页</p>至于Navigator浏览器对象、Screen显示器屏幕等对象与开发者的关系不是太密切,在此处就不做过多讲解。
功能: 控制html文档的内容 代码: 获取页面标签(元素)对象 element; 元素获取:
document.getElementById("id值"):通过元素的id获取元素对象操作Element对象: 1. 修改属性值: 1. 明确获取的对象是哪一个? 2. 查看API文档,找其中有哪些属性可以设置 2. 修改标签体内容: * 属性:innerHTML 1. 获取元素对象 2. 使用innerHTML属性修改标签体内容
计算机通过dom树可以快速的对html文档中的各个标签进行快速定位并进行控制。
dom数如下所示:
Text: 文本对象 Comment: 注释对象 Node: 节点对象,其他对象相当于继承了Node对象。 特点:所有dom对象都可以被认为是一个节点 方法: CRUD dom树: appendChild():向节点的子节点列表的结尾添加新的子节点。 removeChild() :删除(并返回)当前节点的指定子节点。 replaceChild():用新节点替换一个子节点。 属性: parentNode 返回节点的父节点。
XML DOM 应用不是太多,在此处就不做过多复习。
事件指的是某些附件被执行了默写操作后,触发某些代码的执行。
如:单击,双击,键盘按下了,鼠标移动了
通常指的是一些组件。如:按钮 文本输入框… 监听器: 代码。
将事件,事件源,监听器结合在一起,当事件源上发生了某个事件,则触发执行某个监听器代码。
实现学生姓名增删操作。
案例代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>动态表格</title> <style> table{ border: 2px solid; margin: auto; width: 800px; } td,th{ text-align: center; border: 1px solid; } div{ text-align: center; margin: 50px; } </style> </head> <body> <div> <input type="text" id="id" placeholder="请输入编号"> <input type="text" id="name" placeholder="请输入姓名"> <input type="text" id="gender" placeholder="请输入性别"> <input type="button" value="添加" id="btn_add"> </div> <table> <tr> <td>标号</td> <td>姓名</td> <td>性别</td> <td>操作</td> </tr> <tr> <td>1</td> <td>我爱罗</td> <td>男</td> <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td> </tr> <tr> <td>2</td> <td>佐助</td> <td>男</td> <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td> </tr> <tr> <td>3</td> <td>小樱</td> <td>女</td> <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td> </tr> </table> <script> document.getElementById("btn_add").onclick = function () { addFun1(); } function addFun1() { var id = document.getElementById("id").value; var name = document.getElementById("name").value; var gender = document.getElementById("gender").value; //创建td var td_id = document.createElement("td"); var text_id = document.createTextNode(id); td_id.appendChild(text_id); var td_name = document.createElement("td"); var text_name = document.createTextNode(name); td_name.appendChild(text_name); var td_gender = document.createElement("td"); var text_gender = document.createTextNode(gender); td_gender.appendChild(text_gender); var td_a = document.createElement("td"); var ele_a = document.createElement("a"); ele_a.setAttribute("href","javascript:void(0);"); ele_a.setAttribute("onclick","delTr(this);"); var td_del = document.createTextNode("删除"); ele_a.appendChild(td_del); td_a.appendChild(ele_a); //创建tr var tr = document.createElement("tr"); //不能直接链式编程 /*tr.appendChild(td_id).appendChild(td_name) .appendChild(td_gender).appendChild(td_a);*/ tr.appendChild(td_id); tr.appendChild(td_name); tr.appendChild(td_gender); tr.appendChild(td_a); //6获取table并添加到table上 var tab = document.getElementsByTagName("table")[0]; tab.appendChild(tr); } function addFun2() { //2.获取文本框的内容 var id = document.getElementById("id").value; var name = document.getElementById("name").value; var gender = document.getElementById("gender").value; //获取table var table = document.getElementsByTagName("table")[0]; //追加一行 table.innerHTML += "<tr>\n" + " <td>"+id+"</td>\n" + " <td>"+name+"</td>\n" + " <td>"+gender+"</td>\n" + " <td><a href=\"javascript:void(0);\" onclick=\"delTr(this);\" >删除</a></td>\n" + " </tr>"; } function delTr(obj) { var table = obj.parentNode.parentNode.parentNode; var tr = obj.parentNode.parentNode; table.removeChild(tr); } </script> </body> </html>上述代码可以动态实现页面表格增删炒作。
使用js,html,css等技术实现注册案例
全选,反选案例 代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>全选、反选案例</title> <style> table{ border: 2px solid; margin: auto; width: 800px; } td,th{ text-align: center; border: 1px solid; } div{ text-align: center; margin: 50px; } .out{ background-color: white; } .over{ background-color: pink; } </style> <script> window.onload = function () { //全选 document.getElementById("selectAll").onclick = function () { var cbs = document.getElementsByName("cb"); for (let i = 0; i <cbs.length; i++) { cbs[i].checked = true; } } //全不选 document.getElementById("unSelectAll").onclick = function () { var cbs = document.getElementsByName("cb"); for (let i = 0; i < cbs.length; i++) { cbs[i].checked = false; } } //反选 document.getElementById("selectRev").onclick = function () { var cbs = document.getElementsByName("cb"); for (let i = 0; i < cbs.length; i++) { cbs[i].checked = !cbs[i].checked; } } //设置和第一个全选框和后续的选择框一致 document.getElementById("firstCb").onclick = function () { var cbs = document.getElementsByName("cb"); for (let i = 0; i < cbs.length; i++) { cbs[i].checked = this.checked; } } var trs = document.getElementsByTagName("tr"); for (let i = 0; i < trs.length; i++) { trs[i].onmouseover = function () { this.className = "over"; } trs[i].onmouseout = function () { this.className = "out"; } } } </script> </head> <body> <div> <input type="text" id="id" placeholder="请输入编号"> <input type="text" id="name" placeholder="请输入姓名"> <input type="text" id="gender" placeholder="请输入性别"> <input type="button" value="添加" id="btn_add"> </div> <table> <caption>学生信息表</caption> <tr> <th><input type="checkbox" name="cb" id="firstCb" ></td> <th>标号</th> <th>姓名</th> <th>性别</th> <th>操作</th> </tr> <tr> <td><input type="checkbox" name="cb"></td> <td>1</td> <td>我爱罗</td> <td>男</td> <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td> </tr> <tr> <td><input type="checkbox" name="cb"></td> <td>2</td> <td>佐助</td> <td>男</td> <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td> </tr> <tr> <td><input type="checkbox" name="cb"></td> <td>3</td> <td>小樱</td> <td>女</td> <td><a href="javascript:void(0);" onclick="delTr(this);">删除</a></td> </tr> </table> <div> <input type="button" id="selectAll" value="全选"> <input type="button" id="unSelectAll" value="全不选"> <input type="button" id="selectRev" value="反选"> </div> <script> document.getElementById("btn_add").onclick = function () { addFun1(); } function addFun1() { var id = document.getElementById("id").value; var name = document.getElementById("name").value; var gender = document.getElementById("gender").value; var td_checkBox = document.createElement("td"); var td_input = document.createElement("input"); td_input.setAttribute("type","checkbox"); td_input.setAttribute("name","cb"); td_checkBox.appendChild(td_input); //创建td var td_id = document.createElement("td"); var text_id = document.createTextNode(id); td_id.appendChild(text_id); var td_name = document.createElement("td"); var text_name = document.createTextNode(name); td_name.appendChild(text_name); var td_gender = document.createElement("td"); var text_gender = document.createTextNode(gender); td_gender.appendChild(text_gender); var td_a = document.createElement("td"); var ele_a = document.createElement("a"); ele_a.setAttribute("href","javascript:void(0);"); ele_a.setAttribute("onclick","delTr(this);"); var td_del = document.createTextNode("删除"); ele_a.appendChild(td_del); td_a.appendChild(ele_a); //创建tr var tr = document.createElement("tr"); //不能直接链式编程 /*tr.appendChild(td_id).appendChild(td_name) .appendChild(td_gender).appendChild(td_a);*/ tr.appendChild(td_checkBox); tr.appendChild(td_id); tr.appendChild(td_name); tr.appendChild(td_gender); tr.appendChild(td_a); //6获取table并添加到table上 var tab = document.getElementsByTagName("table")[0]; tab.appendChild(tr); } function addFun2() { //2.获取文本框的内容 document.getElementById("").value var id = document.getElementById("id").value; var name = document.getElementById("name").value; var gender = document.getElementById("gender").value; //获取table var table = document.getElementsByTagName("table")[0]; //追加一行 table.innerHTML += "<td><input type=\"checkbox\" name=\"cb\"></td>\n" + " <td>"+id+"</td>\n" + " <td>"+name+"</td>\n" + " <td>"+gender+"</td>\n" + " <td><a href=\"javascript:void(0);\" onclick=\"delTr(this);\">删除</a></td>"; } function delTr(obj) { var table = obj.parentNode.parentNode.parentNode; var tr = obj.parentNode.parentNode; table.removeChild(tr); } </script> </body> </html>实现注册页面动态表单校验 css文件
*{ margin: 0px; padding: 0px; box-sizing: border-box; } body{ background: url("../img/register_bg.png") no-repeat center; padding-top: 25px; } .rg_layout{ width: 900px; height: 500px; border: 8px solid #EEEEEE; background-color: white; /*让div水平居中*/ margin: auto; } .rg_left{ /*border: 1px solid red;*/ float: left; margin: 15px; } .rg_left > p:first-child{ color:#FFD026; font-size: 20px; } .rg_left > p:last-child{ color:#A6A6A6; font-size: 20px; } .rg_center{ float: left; /* border: 1px solid red;*/ } .rg_right{ /*border: 1px solid red;*/ float: right; margin: 15px; } .rg_right > p:first-child{ font-size: 15px; } .rg_right p a { color:pink; } .td_left{ width: 100px; text-align: right; height: 45px; } .td_right{ padding-left: 50px ; } #username,#password,#email,#name,#tel,#birthday,#checkcode{ width: 251px; height: 32px; border: 1px solid #A6A6A6 ; /*设置边框圆角*/ border-radius: 5px; padding-left: 10px; } #checkcode{ width: 110px; } #img_check{ height: 32px; vertical-align: middle; } #btn_sub{ width: 150px; height: 40px; background-color: #FFD026; border: 1px solid #FFD026 ; } .error{ color:red; } #td_sub{ padding-left: 150px; }script 文件
function checkUsername(){ var username = document.getElementById("username").value; var reg_username = /^\w{6,12}$/; var flag= reg_username.test(username); var s_username = document.getElementById("s_username"); if(flag){ s_username.innerHTML = "<img width='35' height='25' src='img/gou.png'/>"; }else { s_username.innerText="密码格式有误"; } return flag; } function checkPassword(){ var password = document.getElementById("password").value; var reg_password = /^\w{6,12}$/; var flag= reg_password.test(password); var s_password = document.getElementById("s_password"); if(flag){ s_password.innerHTML = "<img width='35' height='25' src='img/gou.png'/>"; }else { s_password.innerText="密码格式有误"; } return flag; } window.onload = function () { document.getElementById("form").onsubmit = function () { return checkUsername() && checkPassword(); } document.getElementById("username").onblur=checkUsername; document.getElementById("password").onblur=checkPassword; }html 代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表单校验</title> <link rel="stylesheet" href="css/registerstyle.css"> <script src="./js/register.js" type="text/javascript"></script> </head> <body> <div class="rg_layout"> <div class="rg_left"> <p>新用户注册</p> <p>USER REGISTER</p> </div> <div class="rg_center"> <div class="rg_form"> <!--定义表单 form--> <form action="#" id="form" method="get"> <table> <tr> <td class="td_left"><label for="username">用户名</label></td> <td class="td_right"> <input type="text" name="username" id="username" placeholder="请输入用户名"> <span id="s_username" class="error"></span> </td> </tr> <tr> <td class="td_left"><label for="password">密码</label></td> <td class="td_right"> <input type="password" name="password" id="password" placeholder="请输入密码"> <span id="s_password" class="error"></span> </td> </tr> <tr> <td class="td_left"><label for="email">Email</label></td> <td class="td_right"><input type="email" name="email" id="email" placeholder="请输入邮箱"></td> </tr> <tr> <td class="td_left"><label for="name">姓名</label></td> <td class="td_right"><input type="text" name="name" id="name" placeholder="请输入姓名"></td> </tr> <tr> <td class="td_left"><label for="tel">手机号</label></td> <td class="td_right"><input type="text" name="tel" id="tel" placeholder="请输入手机号"></td> </tr> <tr> <td class="td_left"><label>性别</label></td> <td class="td_right"> <input type="radio" name="gender" value="male" checked> 男 <input type="radio" name="gender" value="female"> 女 </td> </tr> <tr> <td class="td_left"><label for="birthday">出生日期</label></td> <td class="td_right"><input type="date" name="birthday" id="birthday" placeholder="请输入出生日期"></td> </tr> <tr> <td class="td_left"><label for="checkcode" >验证码</label></td> <td class="td_right"><input type="text" name="checkcode" id="checkcode" placeholder="请输入验证码"> <img id="img_check" src="img/verify_code.jpg"> </td> </tr> <tr> <td colspan="2" id="td_sub"><input type="submit" id="btn_sub" value="注册"></td> </tr> </table> </form> </div> </div> <div class="rg_right"> <p>已有账号?<a href="#">立即登录</a></p> </div> </div> </body> </html>参考:w3cshool js 教程传智播客老师笔记。