1 DOM编程
1.JavaScript包括的三大语句块:
- ECMAScript:JS的核心语法(ES规范/ECMA-262标准)
- DOM:Document Object Model(文档对象模型:对网页当中的节点进行增删改的过程。)HTML文档被当做一棵DOM树来看待。
- BOM:Browser Object Model(浏览器对象模型)
关闭浏览器窗口、打开一个新的浏览器窗口、后退、前进、浏览器地址栏上的地址等,都是BOM编程。
2.DOM和BOM的区别和联系?
- BOM的顶级对象:window
- DOM的顶级对象:document
- 实际上BOM是包括DOM
(1) 获取文本框的value
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DOM编程-获取文本框的value</title>
</head>
<body>
<script type="text/javascript">
window.onload=function () {
//以前都省了window,包含document
var bt=window.document.getElementById("btn1");
bt.onclick=function () {
//获取username节点,输入value,得到value
/*var usernameElt=document.getElementById("username")
var username=usernameElt.value;//usernameElt.属性,有属性就可以点
alert(username)*/
//简写上面
alert(document.getElementById("username").value);
//可以修改它的value
document.getElementById("username").value="zhangsan"
}
}
</script>
<input type="text" id="username"/><!---文本框输入的值就是value属性值-->
<input type="button" id="btn1" value="获取文本框的value"/>
<hr color="red">
<script type="text/javascript">
window.onload=function () {
document.getElementById("setBtn").onclick=function () {
document.getElementById("username2").value=document.getElementById("username1").value
}
}
</script>
<input type="text" id="username1"/><br>
<input type="text" id="username2"/><br>
<input type="button" value="将第一个文本框中的value赋值到第二个文本框中" id="setBtn"/>
<!--blur事件:失去焦点事件-->
<!--以下代码中的this代表的是当前input节点对象,this.value就是这个节点对象的value属性--->
<input type="text" onblur="alert(this.value)"/>
</body>
</html>
(2) innerHTML和innerText操作div和span
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DOM编程-innerHTML和innerText操作div和span </title>
<style type="text/css">
#div1{/*id选择器*/
background-color: aquamarine;
width: 300px;
height: 300px;
border: 1px black solid;
position: absolute;
top: 100px;
left: 100px;
}
</style>
</head>
<body>
<script type="text/javascript">
window.onload=function () {
document.getElementById("btn").onclick=function () {
//设置div的内容
//第一步:获取div对象
var divElt=document.getElementById("div1");
//第二步:使用innerHTML innerText属性来设置元素内部的内容
//divElt.innerHTML="快递费缴费即可"
//divElt.innerHTML="<font color='red'>用户名不能为空!</font>" //用户名不能为空!
divElt.innerText="<font color='red'>用户名不能为空!</font>"//全部输出
}
}
</script>
<input type="button" value="设置div中的内容" id="btn"/>
<div id="div1"></div>
</body>
</html>
(3) 正则表达式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DOM编程-正则表达式</title>
</head>
<body>
<script type="text/javascript">
/*
* 1.什么是正则表达式,有什么用
* 正则表达式:Regular Expression
* 正则表达式主要用在字符串格式匹配方面。
* 2.JS编程的正则表达式:
* 第一:常见的正则表达式符号要认识,
* 第二:简单的正则表达式需要会写,
* 第三:他人编写的正则表达式要看懂,
* 第四:在JS当中,怎么创建正则表达式对象(new对象)
* 第五:在JS当中,正则表达式对象有哪些方法(调方法)
* 第六:要能够快速的从网络上找到自己需要的正则表达式。
* 3.常见的正则表达式?
* . 匹配除换行符以外的任意字符
* \w 匹配字母或数字或下划线或汉字
* \s 匹配任意的空白符
* \d 匹配数字
* \b 匹配单词的开始或结束
* ^ 匹配字符串的开始
* $ 匹配字符串的结束
*
* (重复的都是符号相邻的前面字符)
* * 重复零次或更多次
* + 重复一次或更多次
* ? 重复零次或一次
* {n} 重复n次
* {n,} 重复n次或更多次
* {n,m} 重复n到m次
*
* \W 匹配任意不是字母,数字,下划线,
* \S 匹配任意不是空白符的字符
* \D 匹配任意非数字的字符
* \B 匹配不是单词开头或结束的位置
* [^x] 匹配除了x以外的任意字符
* [^aeiou] 匹配除了aeiou这几个字母以外的任意字符
*
* 正则表达式当中的小括号()优先级较高
* [1-9] 表示1到9的任意1个数字(次数是1次)
* [A-Z a-z 0-9] 表示A-Z a-z 0-9中的任意1个字符
* [A-Z a-z 0-9-] 表示A-Z、a-z、0-9、-,以上所有字符中的任意1个字符
* | 表示或者
*
* 4.在JS中怎么创建正则表达式对象,怎么调用正则表达式对象的方法?
* 第一种创建方式: var regExp = /正则表达式/flags;
* 第二种创建方式: 使用内置支持类RegExp
* var regExp= new RegExp("正则表达式","flags")
*
* 关于flags:
* g:全局匹配
* i:忽略大小写
* m:多行搜索 (ES规范之后才支持m)当前面是正则表达式的时候,m不能用。只有前面是普通字符串的时候,m才可以使用。
*
* 正则表达式对象的test()方法?
* true/false=正则表达式对象.test(用户填写的字符串);
* true:字符串格式匹配成功
* false:字符串格式匹配失败
* */
window.onload=function () {
//给按钮绑定click
document.getElementById("btn").onclick=function () {
var email=document.getElementById("email").value;
var emailRegExp=/^\w+([-+.]\w+)*@\w+([-.]\W+)*\.\w+([-.]\w+)*$/g;
var ok=emailRegExp.test(email);
if(ok){
document.getElementById("emailError").innerText="邮箱地址合法";
}else{
document.getElementById("emailError").innerText="邮箱地址不合法";
}
//给email文本框绑定focus,获得焦点
document.getElementById("email").onfocus=function () {
document.getElementById("emailError").innerText=" ";
}
}
}
</script>
<input type="text" id="email"/>
<span id="emailError" style="color: red;font-size:12px;"></span>
<input type="button" value="验证邮箱" id="btn"/>
</body>
</html>
(4) 去除字符串
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DOM编程-去除字符串的前后空白trim</title>
</head>
<body>
<script type="text/javascript">
window.onload=function(){
document.getElementById("btn").onclick=function(){
//获取用户名
var username = window.document.getElementById("username").value;
//去除字符串前后空白
username=username.trim();
//测试
alert("-->"+username+"<---")
}
}
</script>
<input type="text" id="username"/>
<input type="button" id="btn" value="获取用户名"/>
</body>
</html>
(5) 表单验证
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DOM编程-表单验证</title>
<style type="text/css">
span{
color: red;
font-size: 12px;
}
</style>
</head>
<body>
<script type="text/javascript">
window.onload=function () {
//获取username的span标签
var usernameErrorSpan=document.getElementById("usernameError");
//给用户名文本框绑定blur事件
var usernameElt=document.getElementById("username");
usernameElt.onblur=function () {
//获取用户名
var username=usernameElt.value;
//去除前后空白
username=username.trim();
//判断用户名是否为空
/*if(username){
alert("username="+username)
}else {
alert("username是空字符串")
}*/
if(username===""){
//用户名为空
usernameErrorSpan.innerText="用户名不能为空";
}else {
//用户名不为空,继续判断长度[6-14]
if(username.length<6||username.length>14){
//用户名非法
usernameErrorSpan.innerText="用户名长度必须在[6-14]之间"
}else{
//长度合法,继续判断是否有特殊符号
var regExp=/^[A-Za-z0-9]+$/;
var ok=regExp.test(username);
if(ok){
//用户名合法
}else{
//用户名中含有特殊符号
usernameErrorSpan.innerText="用户名只能由数字和字母组成";
}
}
}
//给username这个文本框绑定获得焦点事件
usernameElt.onfocus=function () {
//清空非法的value
if(usernameErrorSpan.innerText !=""){
usernameElt.value="";
}
//清空span
usernameErrorSpan.innerText="";
}
}
//获取密码span标签
var userpwd2ErrorSpan=document.getElementById("userpwd2Error");
//获取确认密码对象并绑定blur失去焦点事件
var userpwd2Elt=document.getElementById("userpwd2");
userpwd2Elt.onblur=function () {
//获取密码和确认密码
var userpwdElt=document.getElementById("userpwd");
var userpwd=userpwdElt.value;
var userpwd2=userpwd2Elt.value;
if((userpwd != userpwd2)||userpwd.length==0 || userpwd2.length==0){
//密码不一致
userpwd2ErrorSpan.innerText="密码不一致或为空";
}else{
}
}
userpwd2Elt.onfocus=function () {
if(userpwd2ErrorSpan.innerText !=""){
userpwd2Elt.value="";
}
userpwd2ErrorSpan.innerText="";
}
//span标签
var emailSpan=document.getElementById("emailError");
//给email绑定blur事件
var emailElt=document.getElementById("email");
emailElt.onblur=function () {
var email=emailElt.value;
email=email.trim();
var emailRegExp=/^\w+([-+.]\w+)*@\w+([-.]\W+)*\.\w+([-.]\w+)*$/g;
var ok=emailRegExp.test(email);
if(ok){
}else{
emailSpan.innerText="邮箱地址不合法";
}
}
//绑定focus
emailElt.onfocus=function () {
if (emailSpan.innerText !=""){
emailElt.value="";
}
emailSpan.innerText="";
}
//给提交按钮绑定鼠标单击事件,submitBtnElt节点对象代表type="button"
var submitBtnElt=document.getElementById("submitBtn");
submitBtnElt.onclick=function () {
//触发username的blur userpwd2的blur email的blur
//不需要人工操作,使用纯JS代码触发事件,。
usernameElt.focus();
usernameElt.blur();
userpwd2Elt.focus();
userpwd2Elt.blur();
emailElt.focus();
emailElt.blur();
//当所有表单都是合法的时候,提交表单
if(usernameErrorSpan.innerText==""&&userpwd2ErrorSpan.innerText==""&&emailSpan.innerText==""){
//提交表单,通过节点来访问form的submit方法
//userFormElt这个节点对象就代表form,可以调用form的任何属性。
var userFormElt=document.getElementById("userForm");
userFormElt.submit();
}
}
}
</script>
<!--表单-->
<form id="userForm" action="http://localhost:8080/jd/save" method="get">
用户名<input type="text" name="username" id="username"/><span id="usernameError"></span><br>
密码<input type="text" name="userpwd" id="userpwd"/><br>
确认密码<input type="text" id="userpwd2"/><span id="userpwd2Error"></span><br>
邮箱<input type="text" name="email" id="email"/><span id="emailError"></span><br>
<!-- submit是提交form表单的按钮 <input type="submit" value="注册"/> -->
<input type="button" value="注册" id="submitBtn">
<input type="reset" value="重置">
</body>
</html>
2 其他应用
(1)复选框的全选与取消全选
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>复选框的全选和取消全选</title>
</head>
<body>
<script type="text/javascript">
window.onload=function () {
var aihaos=document.getElementsByName("aihao");
var firstChk=document.getElementById("firstChk");
firstChk.onclick=function () {
/*//获取第一个复选框的选中状态
//alert(firstChk.checked);
//根据name获取所有元素
var aihaos=document.getElementsByName("aihao");
if(firstChk.checked){
//全选
for (var i=0;i<aihaos.length;i++){
aihaos[i].checked=true;
}
}else{
//取消全选
for (var i=0;i<aihaos.length;i++){
aihaos[i].checked=false;
}
}*/
//简写
for(var i=0;i<aihaos.length;i++){
aihaos[i].checked=firstChk.checked;
}
}
//对以上数组进行遍历
var all=aihaos.length;
for(var i=0;i<aihaos.length;i++){
aihaos[i].onclick=function () {
var checkedCount=0;
//总数量和选中的数量相等的时候,第一个复选框选中。
for(var i=0;i<aihaos.length;i++){
if(aihaos[i].checked){
checkedCount++;
}
}
if(all==checkedCount){
firstChk.checked=true;
}else {
firstChk.checked=false;
}
}
}
}
</script>
<input type="checkbox" id="firstChk"/><br>
<input type="checkbox" name="aihao" value="smoke"/>抽烟<br>
<input type="checkbox" name="aihao" value="drink"/>喝酒<br>
<input type="checkbox" name="aihao" value="tt"/>烫头<br>
</body>
</html>
(2) 获取下拉列表选中项的value
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>获取下拉列表选中项的value</title>
</head>
<body>
<!--<select onchange="alert(this.value)">
<option value="">--请选择省份--</option>
<option value="001">河北省</option>
<option value="002">湖北省</option>
<option value="003">河南省</option>
<option value="004">吉林省</option>
</select>-->
<!--第二种方式-->
<script type="text/javascript">
//选择一个省份,弹一个value值。
window.onload=function () {
var provinceElt=document.getElementById("province");
provinceElt.onchange=function () {
alert(provinceElt.value);
}
}
</script>
<select id="province">
<option value="">--请选择省份--</option>
<option value="001">河北省</option>
<option value="002">湖北省</option>
<option value="003">河南省</option>
<option value="004">吉林省</option>
</select>
</body>
</html>
(3) 显示网页时钟:Date内置支持类
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>显示网页时钟:Date内置支持类</title>
</head>
<body>
<script type="text/javascript">
/*
* 关于JS内置支持类:Date 可以用来获取时间、日期
* */
//获取当前系统时间
var nowTime=new Date();
//新的输出alert-->write
document.write(nowTime);
document.write("<br>");
document.write("<br>");
//转换成具有本地语言环境的日期格式
nowTime=nowTime.toLocaleString();
document.write(nowTime);
document.write("<br>");
document.write("<br>");
//当以上格式不是自己想要的,可以通过日期,自己制定格式
var t=new Date();
var year=t.getFullYear();
var month=t.getMonth();//月份是:0——11
//var day=t.getDay();//获取一周的第几天(0-6)
var day=t.getDate();//获取日
document.write(year+"年"+(month+1)+"月"+day+"日");
document.write("<br>");
document.write("<br>");
//重点:获取从1970年1月1日 00:00:00 000到当前系统时间的总毫秒数
document.write(new Date().getTime());
</script>
<script type="text/javascript">
function displayTime() {
var time=new Date();
var strTime=time.toLocaleString();
document.getElementById("timeDiv").innerHTML=strTime;
}
//每隔1秒调用displayTime()函数
start=function() {
//从这行代码执行结束开始,则会不间断的每隔1000毫秒调用一次displayTime()函数
//这里的v没有var是全局变量,方便下面stop调用
v= window.setInterval("displayTime()",1000);//setInterval周期性的调用函数
}
//停止系统时间
function stop() {
window.clearInterval(v);//clearInterval取消setInterval周期性的返回值
}
</script>
<br><br>
<input type="button" value="显示系统时间" onclick="start()"/>
<input type="button" value="停止系统时间" onclick="stop()">
<div id="timeDiv"></div>
</body>
</html>
(4) 内置支持类Array
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>内置支持类Array</title>
</head>
<body>
<script type="text/javascript">
var arr=[]//创建长度为0的数组
alert(arr.length);//0
//数据类型随意
var arr2=[1,2,3,4,5.6,false,"sad"];
alert(arr2.length);
//下标不会越界,自动扩容,没有的赋undefined
arr2[8]="test";
document.write("<br><br>");
//遍历
for(var i=0;i<arr2.length;i++){
window.alert(arr2[i]);
}
//另一种创建数组的方式
var a1=new Array()
document.write(a1.length+"<br>");
var a2=new Array(3)//3代表长度
document.write(a2.length+"<br>");
var a3=new Array(2,3,6,5)//代表数组中的元素
document.write(a3.length+"<br>");
var a=[1,2,34,5.6];
var str=a.join("-");
document.write(str+"<br>");//1-2-34-5.6
//在数组末尾添加一个元素(数组长度+1)
a.push(12);
document.write(a.join("-")+"<br>");
//将数组末尾元素弹出(数组长度-1)
var endElt=a.pop();
document.write(endElt+"<br>");
document.write(a.join("+")+"<br>");
//反转数组
a.reverse();
document.write(a.join("=="));
</script>
</body>
</html>