JavaScript基础篇下

JavaScript笔记

1.JavaScript表单

1.1 验证输入是否为空:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>
function validateForm() {
    var x = document.forms["myForm"]["fname"].value;
    if (x == null || x == "") {
        alert("需要输入名字。");
        return false;
    }
}
</script>
</head>
<body>

<form name="myForm" action="demo_form.php" onsubmit="return validateForm()" method="post">
名字: <input type="text" name="fname">
<input type="submit" value="提交">
</form>

</body>
</html>
1.2 验证输入是否为指定范围数字:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>JavaScript 验证输入</h1>
<p>请输入 1  10 之间的数字:</p>
<input id="numb">
<button type="button" onclick="myFunction()">提交</button>
<p id="demo"></p>

<script>
function myFunction() {
    var x, text;
    x = document.getElementById("numb").value;
    if (isNaN(x) || x < 1 || x > 10) {
        text = "输入错误";
    } else {
        text = "输入正确";
    }
    document.getElementById("demo").innerHTML = text;
}
</script>
</body>
</html>
1.3 表单自动验证:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>

<form action="demo_form.php" method="post">
  <input type="text" name="fname" required="required">
  <input type="submit" value="提交">
</form>

<p>点击提交按钮,如果输入框是空的,浏览器会提示错误信息。</p>

</body>
</html>

使用一个required属性可以让浏览器自动识别是否为空,为空则给出提示。
Internet Explorer 9 及更早 IE 浏览器不支持表单自动验证。

E-mail 验证:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<head>
<script>
function validateForm(){
	var x=document.forms["myForm"]["email"].value;
	var atpos=x.indexOf("@");
	var dotpos=x.lastIndexOf(".");
	if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length){
		alert("不是一个有效的 e-mail 地址");
  		return false;
	}
}
</script>
</head>
<body>
	
<form name="myForm" action="demo-form.php" onsubmit="return validateForm();" method="post">
Email: <input type="text" name="email">
<input type="submit" value="提交">
</form>
	 
</body>
</html>

上述限制条件为:
输入的数据必须包含 @ 符号和点号(.)。同时,@ 不可以是邮件地址的首字符,并且 @ 之后需有至少一个点号

2.JavaScript使用误区

2.1 比较运算符常见错误
var x = 10;
var y = "10";
if (x == y)

在常规的比较中,数据类型是被忽略的,上述结果返回 true;

var x = 10;
var y = "10";
if (x === y)

在严格的比较运算中,=== 为恒等计算符,同时检查表达式的值与类型,
上述结果返回 false;
在switch语句中,case比较时为“===”恒等比较。

2.2 浮点型数据使用注意事项

JavaScript 中的所有数据都是以 64 位浮点型数据(float) 来存储。
所有的编程语言,包括 JavaScript,对浮点型数据的精确度都很难确定。
所以0.1+0.2≠0.3,经测试,0.3,0.6这些都不完全相等。
0.1+0.2=0.30000000000000004。
为什么?
简而言之:计算机不能精确的表示浮点数。
深层原因:为什么0.1+0.2不等于0.3
解决的办法就是:

var x = 0.1;
var y = 0.2;
var z = (x * 10 + y * 10) / 10;      //结果是0.3
2.3 数组的索引
2.3.1普通数组
var person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
var x = person.length;         // person.length 返回 3
var y = person[0];             // person[0] 返回 "John"

普通数组直接使用下标访问。

2.3.2关联数组
var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length;         // person.length 返回 0
var y = person[0];             // person[0] 返回 undefined

在 JavaScript 中, 对象 使用 名字作为索引。
如果你使用名字作为索引,当访问数组时,JavaScript 会把数组重新定义为标准对象。
执行这样操作后,数组的方法及属性将不能再使用,否则会产生错误。

3.this关键字

面向对象语言中 this 表示当前对象的一个引用。
但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。

  • 在方法中,this 表示该方法所属的对象。
  • 如果单独使用,this 表示全局对象。
  • 在函数中,this 表示全局对象。
  • 在函数中,在严格模式下,this 是未定义的(undefined)。
  • 在事件中,this 表示接收事件的元素。
  • 类似 call() 和 apply() 方法可以将 this 引用到任何对象。
var person = {
  firstName: "John",
  lastName : "Doe",
  id       : 5566,
  fullName : function() {
    return this.firstName + " " + this.lastName;
  }
};

上述代码中,person是一个有属性和方法的对象,对象中的属性若需要使用方法体外的方法需要借助this。

4.void关键字

Javascript中的void表示不返回任何值,但是会执行括号里的代码。

 <a href="javascript:void(0)">单此处什么也不会发生</a>
 //一个空连接
href="#"与href="javascript:void(0)"的区别

包含了一个位置信息,默认的锚是#top 也就是网页的上端。
而javascript:void(0), 仅仅表示一个死链接。

<a href="javascript:void(alert('Warning!!!'))">点我!</a>
//点击后会弹窗

4.JavaScript DOM

DOM(Document Object Model):文档对象模型。
通过DOM,Javascript可以操作HTML的任何元素。

4.1 获取HTML元素

4.1.1 通过id名
var x = document.getElementById("intro");
4.1.2 通过类名
var x = document.getElementsByClassName("intro");
4.1.3 通过标签名
var x = document.getElementsByTagName("p");
//按顺序获取到html中所有的p标签元素
4.1.4 通过标签名获取指定的元素
var x=document.getElementById("main");
var y=x.getElementsByTagName("p");
//获取id为main的元素里所有的p标签元素

4.2 更改HTML元素内容

4.2.1 更改元素的文字内容
<html>
<body>
<p id="p1">Hello World!</p>
<script>
document.getElementById("p1").innerHTML="新文本!";
</script>
</body>
</html>
4.2.2 更改元素的属性
<!DOCTYPE html>
<html>
<body>
<img id="image" src="smiley.gif">
<script>
document.getElementById("image").src="landscape.jpg";		//更改image的属性值
</script>
</body>
</html>
4.2.3 更改元素的样式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
 
<p id="p1">Hello World!</p>
<p id="p2">Hello World!</p>
<script>
document.getElementById("p2").style.color="blue";
document.getElementById("p2").style.fontFamily="Arial";
document.getElementById("p2").style.fontSize="larger";
</script>
<p>以上段落通过脚本修改。</p>
 
</body>
</html>

5. DOM事件

5.1对事件作出反应

  • 当用户点击鼠标时
  • 当网页已加载时
  • 当图像已加载时
  • 当鼠标移动到元素上时
  • 当输入字段被改变时
  • 当提交 HTML 表单时
  • 当用户触发按键时
 <!DOCTYPE html>
<html>
<body>
<h1 onclick="this.innerHTML='Ooops!'">点击文本!</h1>
</body>
</html>

直接操作或者使用函数:

<!DOCTYPE html>
<html>
<head>
<script>
function changetext(id)
{
    id.innerHTML="Ooops!";
}
</script>
</head>
<body>
<h1 onclick="changetext(this)">点击文本!</h1>
</body>
</html>

5.2 onload事件

在页面加载完成时,自动触发onload事件。
与onload事件对应的是一个onunload事件,在关闭页面时触发,但是实测效果并不好。
(直接关闭浏览器页面窗口,页面没有任何提示。)

<body onload="checkCookies()">
//表示在页面加载完成时检查浏览器的cookies是否可用

5.3 onchange事件

onchange事件能检测元素的值是否已经改变,通常和input输入框结合使用。

5.4 鼠标事件

  • onmouseover:鼠标移动到元素上时触发
  • onmouseout:鼠标没有在元素上时触发(默认触发)
  • onmousedown:鼠标长按点击时触发
  • onmouseup:鼠标松开时触发(默认触发)
  • onclick:单次点击触发

6.addEventListener() 方法

  • addEventListener() 方法用于给元素添加事件句柄。
  • addEventListener() 方法用于向指定元素添加事件句柄。
  • addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。
  • 你可以向一个元素添加多个事件句柄。
  • 你可以向同个元素添加多个同类型的事件句柄,如:两个 “click” 事件。
  • 你可以向任何 DOM 对象添加事件监听,不仅仅是 HTML 元素。如: window 对象。
  • addEventListener() 方法可以更简单的控制事件(冒泡与捕获)。
  • 当你使用 addEventListener() 方法时, JavaScript 从 HTML 标记中分离开来,可读性更强, 在没有控制HTML标记时也可以添加事件监听。
  • 你可以使用 removeEventListener() 方法来移除事件的监听。
语法
element.addEventListener(event, function, useCapture);

第一个参数是事件的类型 (如 “click” 或 “mousedown”).
第二个参数是事件触发后调用的函数。
第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。
在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素。 默认值,值为false。
在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件。值为true。

实例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>

<p>该实例使用 addEventListener() 方法在按钮中添加点击事件。 </p>
<button id="myBtn">点我</button>
<p id="demo"></p>
<script>
document.getElementById("myBtn").addEventListener("click", displayDate);    //添加事件句柄
function displayDate() {													//js代码块
    document.getElementById("demo").innerHTML = Date();
}
</script>

</body>
</html>

7.DOM元素(节点)

创建新的 HTML 元素 (节点) - appendChild()
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>

<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另外一个段落。</p>
</div>
 
<script>
var para = document.createElement("p");
var node = document.createTextNode("这是一个新的段落。");
para.appendChild(node);
 
var element = document.getElementById("div1");
element.appendChild(para);
</script>

</body>
</html>

添加一个新的节点元素需要五步:
1.

var para = document.createElement("p");
 <p> 元素创建一个新的文本节点:
var node = document.createTextNode("这是一个新的段落。");
将文本节点添加到 <p> 元素中:
para.appendChild(node);
最后,在一个已存在的元素中添加 p 元素。
var element = document.getElementById("div1");
查找已存在的元素:
element.appendChild(para);
添加到已存在的元素中:

注:默认是添加后元素的最后位置,若要添加到指定位置的前面。需要在第二步多建一个变量child获取到待添加指定位置的元素名,然后在第五步把appendChild(para)换成inserBefore(para,child)

若要移除一个元素:

var parent = document.getElementById("div1");
var child = document.getElementById("p1");
parent.removeChild(child);

若要替换一个元素:

var parent = document.getElementById("div1");
var child = document.getElementById("p1");
parent.replaceChild(para, child);

8.DOM集合(Collection)

getElementsByTagName() 方法返回 HTMLCollection 对象。
因为getElementsByTagName() 方法返回的跟标签名一样的所有标签。
Collection不是一个数组,但是可以像数组一样通过下标访问,且有length属性。
但是不能使用数组的方法如: valueOf(), pop(), push(), 或 join() 。

var x = document.getElementsByTagName("p");			//集合中的元素可以通过索引( 0 为起始位置)来访问。
y = x[1];											//访问第二个 <p> 元素可以是以下代码:

Collection有length属性,可以访问到Collection集合的长度。

var myCollection = document.getElementsByTagName("p");
document.getElementById("demo").innerHTML = myCollection.length;

注:JS中还有一个节点列表NodeList,与集合Collection类似,有length和可以通过下标访问,不能使用数组的特有方法。
一些旧版本浏览器中的方法(如:getElementsByClassName())返回的是 NodeList 对象,而不是 HTMLCollection 对象。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值