JavaScript(JS)
- 起源:主要是为了完成页面的数据验证。因此JS运行在客户端,需要运行浏览器来解析完成JS代码。原名为LiveScript,后为了吸引java用户更名。JS和java是两种语言。
- JS是弱类型(类型可变),Java是强类型(定义变量时类型确定且不可变)
- 特点:
- 交互性:他可以做的就是信息的动态交互
- 安全性:他不允许直接访问本地硬盘
- 跨平台性:只要是可以解释JS的浏览器都可以执行,和平台无关
JS和html代码的结合方式
-
只需要在head标签中,或者body标签中,使用script标签来书写JS代码 -
使用script标签引入单独的js代码文件
- src属性,专门用来引入js文件路径,可以是相对路径也可以是绝对路径
-
script标签可以用来定义js代码,也可以用来引入js文件。
- 但是一个script标签不能同时使用两个方式
- 可以定义多个script标签来两种方式同时使用
变量
-
定义:可以存放某些值的内存的命名 -
变量类型:
- 数值型:number
- 字符串类型:string
- 对象类型:object
- 布尔类型:boolean
- 函数类型:function
-
js中的特殊值:
-
定义变量格式:
-
var 变量名; -
var 变量名 = 值; -
typeof()
运算
关系(比较)运算
- 等于:==,用于字面上的比较
- 全等于:===,不止是字面上的比较,还要求数据类型完全相同
逻辑运算
数组
-
定义方式
- var 数组名 = []; // 空数组
- var 数组名 = [1, “abc”, true]; // 类型可以不同
-
使用方式:
函数(重点)
定义方式
-
使用function关键字来定义函数
<script type="text/javascript">
function fun(){
alert("无参函数fun被调用");
}
fun()
function f(a,b){
alert("有参函数f被调用了,a=" + a);
}
f(1,2)
</script>
-
在JS中如何定义带有返回值的函数
function f2(num1, num2){
return num1 + num2;
}
alert(f2(2,3));
-
另一种写法
var f3 = function (){}
注:与Java不同,JS中不允许函数重载,相同的函数名会覆盖上一个函数
隐形参数arguments(只在函数内)
-
隐形参数:在函数中,不需要定义,但可以直接用来获取所有参数的变量 -
类似于java中的可变长参数(public void fun[ Object …args];),实际上是一个数组 function fun(){
alert(arguments[1] + arguments.length);
alert("无参函数fun被调用");
}
fun(1,2)
-
因为有隐形参数,所以js中的函数形参和实参的数目无需对应
自定义对象(扩展)
事件
-
定义:电脑输入设备和页面进行交互的响应 -
常用事件:
- onload:加载完成事件。页面加载完成后,常用于页面js代码初始化操作
- onclick:单击事件。常用于按钮的点击响应操作
- onblur:失去焦点事件。常用于输入框失去焦点后验证其输入内容是否合法
- onchange:内容发生事件。常用于下拉列表和输入框内容发生改变后操作
- onsubmint:表单提交事件。常用于表单提交前,验证所有表单项是否合法
-
事件的注册(绑定)
- 告诉浏览器,当事件响应后要执行哪些操作代码
- 两种方法:
- 静态注册:通过html标签的事件属性直接赋予事件响应后的代码
- 动态注册:先通过js代码得到标签的dom对象,再通过dom对象.事件名 = function(){}; 这种形式赋予事件响应后的代码
- 基本步骤:(固定写法)
- 获取标签对象
- 标签对象.事件名 = function(){};
<body onload="alert('静态注册onload事件')">
</body>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function onloadFun(){
alert('静态注册onload事件');
}
</script>
</head>
<body onload="onloadFun()">
</body>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function onloadFun(){
alert('静态注册onload事件');
}
window.onload = function (){
alert('动态注册onload事件');
}
</script>
</head>
<body>
</body>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function onFun(){
alert('静态注册onclick事件');
}
<!--动态注册onclick事件-->
window.onclick = function (){
var btnObj = document.getElementById("001");
btnObj.onclick = function (){
alert('动态注册onclick事件');
}
}
</script>
</head>
<body>
<button onclick="onFun()">按钮1</button>
<button id="001">按钮2</button>
</body>
【注】IDEA可以使用快捷键添加行注释Ctrl+/、块注释Ctrl+Shift+/
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function onFun(){
console.log('静态注册onblur事件');
}
<!--动态注册onblur事件-->
window.onclick = function (){
var Obj = document.getElementById("001");
Obj.onclick = function (){
console.log('动态注册onblur事件');
}
}
</script>
</head>
<body>
用户名:<input type="text" onblur="onFun();"><br/>
密码:<input type="text" id="001"><br/>
</body>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function onFun(){
alert('静态注册onchange事件');
}
<!--动态注册onblur事件-->
window.onclick = function (){
var Obj = document.getElementById("001");
Obj.onchange = function (){
alert('动态注册onchange事件');
}
}
</script>
</head>
<body>
<select onchange="onFun()">
<option>--女神0--</option>
<option>--女神1--</option>
<option>--女神2--</option>
<option>--女神3--</option>
</select>
<select id="001">
<option>--男神0--</option>
<option>--男神1--</option>
<option>--男神2--</option>
<option>--男神3--</option>
</select>
</body>
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function onFun(){
alert('静态注册onsubmit事件');
return false;
}
<!--动态注册onblur事件-->
window.onclick = function (){
var Obj = document.getElementById("001");
Obj.onsubmit = function (){
alert('动态注册onsubmit事件');
return false;
}
}
</script>
</head>
<body>
<form action="http://locallhost:8080" method="get" onsubmit="return onFun()">
<input type="submit" value="静态注册">
</form>
<form action="http://locallhost:8080" id="001">
<input type="submit" value="动态注册">
</form>
</body>
DOM模型(重点)
- 全称是Document Object Model文档对象模型
- 就是把文档中的标签、属性、文本转换为对象来进行管理

-
Document对象的理解
- document他管理了所有的html文档内容
- document是一种树状结构的文档,有层级关系
- document让我们把所有标签都对象化
- 我们可以通过document访问所有的标签对象
-
html中的对象化
-
java中的对象化,就是创建一个类,完成对一类信息的抽象 class Person{
private int age;
private String sex;
private String name;
}
-
html中的对象化 <body>
<div id="001">div01</div>
</body>
Document对象中的方法(重点)
- document.getElementById(elementId):通过标签的id属性查找标签的dom对象,elementId是标签的id属性值。若有多个id相同,则返回第一个
- document.getElementByNmae(elementName):通过标签的name属性查找标签dom对象,elementName是标签的name属性是
- document.getElementByTagNmae(tagName):通过标签名查找标签dom对象。tagName是标签名
- document.createElement(tagName):方法,通过给定的标签名,创建一个标签对象。tagName是要创建的标签名
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function onclickFun(){
var usernameObj = document.getElementById("username")
var username = usernameObj.value;
var patt = /^\w{5,12}$/;
if (patt.test(username)){
alert('合法');
return true;
}else {
alert('不合法');
return false;
}
}
</script>
</head>
<body>
用户名: <input type="text" id="username">
<button onclick="onclickFun()">提交</button>
</body>
正则表达式
- RegExp(“e”); // 表示字符串中是否包含“e”
- /e/; // 与上相同
- /[abc]/; // 字符串中是否包含a或b或c
- /[a-z]/, /[A-Z]/, /[0-9]/
- \w: a-z, A-Z, 0-9, _
- \W: \w的反义
- 量词:+, *, ?, {n}(连续出现n次), {n,m}(连续出现n或m次), {n,}(至少n次), $, ^
验证提示方式
// 后方显示字符提示错误(或者图片)
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function onclickFun(){
var usernameObj = document.getElementById("username")
var username = usernameObj.value;
var patt = /^\w{5,12}$/;
var spanObj = document.getElementById("span");
if (patt.test(username)){
return true;
}else {
spanObj.innerHTML = '不合法';
return false;
}
}
</script>
</head>
<body>
用户名: <input type="text" id="username">
<span id="span" style="color: red"></span>
<button onclick="onclickFun()">提交</button>
</body>
getElementsByName
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
function checkAll(){
var hobbies = document.getElementsByName("hobby");
for(var i = 0; i < hobbies.length; i++){
hobbies[i].checked = true;
}
}
function checkNo(){
var hobbies = document.getElementsByName("hobby");
for(var i = 0; i < hobbies.length; i++){
hobbies[i].checked = false;
}
}
function checkReverse(){
var hobbies = document.getElementsByName("hobby");
for(var i = 0; i < hobbies.length; i++){
if (hobbies[i].checked){
hobbies[i].checked = false;
}else{
hobbies[i].checked = true;
}
}
}
</script>
</head>
<body>
兴趣爱好:
<input type="checkbox" name="hobby" value="cpp">C++
<input type="checkbox" name="hobby" value="java">Java
<input type="checkbox" name="hobby" value="js">JavaScript
<br/>
<button onclick="checkAll()">全选</button>
<button onclick="checkNo()">全不选</button>
<button onclick="checkReverse()">反选</button>
</body>
getElementByTagName
-
document.getElementsByTagName();根据指定的标签名,返回多个标签对象集合 -
操作类似数组,集合中每个元素都是dom对象 -
集合中的顺序就是html页面中从上到下的顺序 -
【注】就是说除了提取标签方式不同,余下都和getElementByNmae一样 -
三个方法的优先级:(包含的范围越精细,优先级越高)
- getElementById
- getElementByName
- getElementByTagNmae
-
以上三个方法只有在页面代码加载完成后才能进行查询这个对象
节点(标签对象)的常用属性和方法
-
方法:
- getElementByTagName():实际上是获取当前节点的指定标签名的子节点
- appendChild(oChildNode):可以添加一个子节点
-
属性:
- childNodes:获取当前节点的所有子节点
- firstChild:获取当前节点的第一个子节点
- lastChild:获取当前节点的最后一个子节点
- parentNode:获取当前节点的父节点
- nextSibling:获取当前节点的下一个节点
- previousSibling:获取当前节点的上一个节点
- className:获取/设置标签的class属性
- innerHTML:表示获取/设置起始标签和结束标签中的内容
- innerText:表示获取/设置起始标签和结束标签中的文本
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
window.onload = function (){
var divObj = document.createElement("div");
divObj.innerHTML = "hello";
document.body.appendChild(divObj);
}
</script>
</head>
|