JavaScript基础03
001-DOM编程- 获取文本框的value
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DOM编程- 获取文本框的value</title>
</head>
<body>
<script type="text/javascript">
/*
1、JavaScript包括三大块:
ECMAScript:JS的核心语法(ES规范/ECMA-262标准)
DOM:Document Object Model(文档对象模型:对网页上的节点进行增删改的过程。)HTML文档被当做一颗DOM树来看待。
var domObj = document.getElementById("id");
BOM: Browser Object Model(浏览器对象模型)
关闭浏览器窗口、打开一个新的浏览器窗口、后退、前进、浏览器地址栏上的地址等,都是BOM编程。
2、DOM和BOM的区别和联系?
BOM的顶级对象是:window
DOM的顶级对象是:document
实际上BOM包括DOM!
*/
/*window.onload = function () {
//var btnElt = window.document.getElementById("btn");
var btnElt = document.getElementById("btn");
alert(btnElt); // [object HTMLInputElement]
}*/
window.onload = function () {
var btnElt = document.getElementById("btn");
btnElt.onclick = function () {
/*
// 获取username节点
var usernameElt = document.getElementById("username");
alert(username.value);
*/
//alert(document.getElementById("username").value);
// 可以修改它的value
document.getElementById("username").value = "zhangsan";
}
}
</script>
<!--
<input type="button" id="btn" value="hello"/>
-->
<input type="text" id="username"/>
<input type="button" id="btn" value="获取文本框的value"/>
<hr>
<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" id="setbtn" value="将第一个文本框中的内容赋值给第二个文本框"/>
<br>
<!--
blur事件:失去焦点事件
以下代码中的this代表的是当前input节点对象,this.value就是这个节点对象的value属性。
-->
<input type="text" onblur="alert(this.value)"/>
</body>
</html>
002-DOM编程-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{
background-color: aquamarine;
width: 300px;
height: 300px;
border: 1px black solid;
position: absolute;
top: 100px;
left: 100px;
}
</style>
</head>
<body>
<!--
innerHTML和innerText属性有什么区别?
相同点:都是设置元素内部的内容。
不同点:
innerHTML,会把后面的“字符串”当作一段HTML代码解释并执行。
innerText,即使后面是一段HTML代码,也只是将其当作普通的字符串来看待。
-->
<script type="text/javascript">
window.onload = function () {
document.getElementById("btn").onclick = function () {
// 设置div中的内容
// 第一步:获取div对象
var divElt = document.getElementById("div1");
// 第二步:使用innerHTML属性来设置元素内部的内容
//divElt.innerHTML = "Hello World!";
//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>
003-DOM编程-关于正则表达式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DOM编程-关于正则表达式</title>
</head>
<body>
<script type="text/javascript">
/*
1、什么是正则表达式?有什么用?
正则表达式:Regular Expression
正则表达式主要用在字符串格式匹配上面。
2、正则表达式实际上是一门独立的学科,在Java语言中支持,C语言中也支持,javascript中也支持。
大部分编程语言都支持正则表达式。正则表达式最初使用在医学方面,用来表示神经符号。目前使用最多
的是计算机编程领域。用作字符串格式匹配,包括搜索方面。
3、正则表达式,对于我们javascript编程来说,掌握哪些内容呢?
第一,常见的正则表达式符号要认识。
第二,简单的正则表达式要会写。
第三,他人编写的正则表达式要能看懂。
第四,在javascript当中,怎么创建正则表达式对象!(new对象)
第五,在javascript当中,正则表达式对象有哪些方法!(调方法)
第六,要能够快速的从网络上找到自己需要的正则表达式,并且测试其有效性。
4、常见的正则表达式符号?
.匹配除换行符以外的任意字符
\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-Za-z0-9]表示A-Za-z0-9中的任意1个字符
[A-Za-z0-9-]表示A-Z、a-z、0-9、-,以上所有字符中的任意1个字符。
|表示或者
[abc]表示匹配字符 a、b 或 c 中的任意一个
5、简单的正则表达式要会写
QQ号的正则表达式:^[1-9][0-9]{4,}$
6、他人编写的正则表达式要能看懂?
email正则,^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
7、怎么创建正则表达式对象,怎么调用正则表达式对象的方法?
第一种创建方式:
var regExp = /正则表达式/flags;
第二种创建方式:
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+)*$/;
var ok = emailRegExp.test(email);
if(ok){
document.getElementById("emailError").innerText = "邮箱地址合法";
}else{
document.getElementById("emailError").innerText = "邮箱地址不合法";
}
}
//给文本框绑定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>
<br>
<input type="button" value="验证邮箱" id="btn"/>
</body>
</html>
004-DOM编程-去除字符串前后的空白
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DOM编程-去除字符串前后的空白</title>
</head>
<body>
<script type="text/javascript">
// 低版本的IE浏览器不支持字符串的trim()函数,怎么办?
// 可以自己对String类扩展一个全新的trim()函数
String.prototype.trim = function () {
//alert("扩展之后的trim方法");
//去除当前字符串的前后空白
//在当前的方法中的this代表的就是当前字符串
return this.replace(/^\s+/,"").replace(/\s+$/,"");
}
window.onload = function () {
document.getElementById("btn").onclick = function () {
// 获取用户名
var username = document.getElementById("username").value;
// 去除前后空白
username = username.trim();
// 测试
alert("--->" + username + "<---");
}
}
</script>
<input type="text" id="username"/>
<input type="button" value="获取用户名" id="btn"/>
</body>
</html>
<!--
表单验证;
(1)用户名不能为空。
(2)用户名必须在6-14位之间。
(3)用户名只能由数字和字母组成,不能含有其它符号(正则表达式)。
(4)密码和确认密码一致,邮箱地址合法。
(5)统一失去焦点验证。
(6)错误提示信息统一在span标签中提示,并且要求字体12号,红色。
(7)文本框再次获得焦点 后,清空错误提示信息,如果文本框中数据不合法要求清空文本框的value。
(8)最终表单中所有项均合法方可提交。
-->
005-DOM编程-表单验证
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单验证</title>
<style type="text/css">
span{
color:red;
font-size: 12px;
}
</style>
</head>
<body>
<script type="text/javascript">
/*
表单验证;
(1)用户名不能为空。
(2)用户名必须在6-14位之间。
(3)用户名只能由数字和字母组成,不能含有其它符号(正则表达式)。
(4)密码和确认密码一致,邮箱地址合法。
(5)统一失去焦点验证。
(6)错误提示信息统一在span标签中提示,并且要求字体12号,红色。
(7)文本框再次获得焦点后,清空错误提示信息,如果文本框中数据不合法要求清空文本框的value。
(8)最终表单中所有项均合法方可提交。
*/
window.onload = function () {
//给用户名文本框绑定blur事件(失去焦点事件)
//获取username的span标签
var usernameError = document.getElementById("usernameError");
var usernameElt = document.getElementById("username");
usernameElt.onblur = function () {
// 获取用户名
var username = document.getElementById("username").value;
// 去除前后空白
username = username.trim();
// 判断用户名是否为空
/*if(Boolean(username)){
// 代表username非空
alert("username=" + username);
}else{
// 代表username为空
alert("username为空字符串");
}*/
//if(username.length == 0){}
if(username === ""){
// 用户名为空
usernameError.innerText = "用户名不能为空!";
}else{
// 用户名不为空
// 继续判断长度
if(username.length < 6 || username.length > 14){
usernameError.innerText = "用户名长度必须在[6-14]之间";
}else{
// 用户名长度合法
// 继续判断是否含有特殊符号
var regExp = /^[A-Za-z0-9]+$/;
var ok = regExp.test(username);
if(ok){
// 用户名最终合法
}else{
// 用户名中含有特殊字符
usernameError.innerText = "用户名只能由数字和字母组成";
}
}
}
}
// 给username这个文本框绑定获得焦点事件
usernameElt.onfocus = function () {
// 清空非法value
if(usernameError.innerText != ""){
username.value = "";
}
// 清空span
usernameError.innerText = "";
}
// 获取确认密码的提示标签
var pwdError= document.getElementById("pwdError");
// 获取确认密码框对象
var userpwd2Elt = document.getElementById("userpwd2");
// 绑定blur事件(失去焦点事件)
userpwd2Elt.onblur = function () {
// 获取密码和确认密码
var userpwdElt = document.getElementById("userpwd");
var userpwd = userpwdElt.value;
var userpwd2 = userpwd2Elt.value;
if(userpwd != userpwd2){
// 密码不一致
pwdError.innerText = "前后密码不一致";
}else{
// 密码一致
}
}
// 给确认密码的这个文本框绑定获得焦点事件
userpwd2Elt.onfocus = function () {
if(pwdError.innerText != ""){
userpwd2Elt.value = "";
}
pwdError.innerText = "";
}
// 获取email的span
var emailError = document.getElementById("emailError");
// 给email绑定blur事件
var emailElt = document.getElementById("email");
emailElt.onblur = function () {
// 获取email
var email = emailElt.value;
// 编写email的正则
var emailRegExp = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
var ok = emailRegExp.test(email);
if(ok){
// 邮箱合法
}else{
// 邮箱不合法
emailError.innerText = "邮箱地址不合法";
}
}
// 给email绑定focus事件
emailElt.onfocus = function () {
if(emailError.innerText != ""){
emailElt.value = "";
}
emailError.innerText = "";
}
// 给提交按钮绑定鼠标单击事件
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(usernameError.innerText == "" && pwdError.innerText == "" && emailError.innerText == ""){
// 获取表单对象
var userFormElt = document.getElementById("userForm");
// 可以在这里设置action
userFormElt.action = "http://localhost:8080/jd/save";
// 提交表单
userFormElt.submit();
}
}
}
</script>
<!--这个表单提交应该使用post,这里为了检测,所以使用get。-->
<!--<form id="userForm" action="http://localhost:8080/jd/save" method="get">-->
<form id="userForm" 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="pwdError"></span>
<br>
邮箱<input type="text" name="email" id="email"/>
<span id="emailError"></span>
<br>
<!-- <input type="submit" value="注册"/> -->
<input type="button" value="注册" id="submitBtn"/>
<input type="reset" value="重置"/>
</form>
</body>
</html>
006-DOM编程-复选框的全选和取消全选
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>复选框的全选和取消全选</title>
</head>
<body>
<script type="text/javascript">
/*window.onload = function () {
var firstChkElt = document.getElementById("firstChk");
firstChkElt.onclick = function () {
// 先获取第一个复选框的选中状态(复选框对象是checkbox对象)
// alert(firstChkElt.checked);
// 根据name获取所有元素
var aihaos = document.getElementsByName("aihao");
if(firstChkElt.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;
}
}
}
}*/
window.onload = function () {
var aihaos = document.getElementsByName("aihao");
var firstChkElt = document.getElementById("firstChk");
firstChkElt.onclick = function () {
// 先获取第一个复选框的选中状态(复选框对象是checkbox对象)
// alert(firstChkElt.checked);
// 根据name获取所有元素
for(var i = 0; i < aihaos.length; i ++){
aihaos[i].checked = firstChkElt.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){
firstChkElt.checked = true;
}else{
firstChkElt.checked = false;
}*/
firstChkElt.checked = (all == checkedCount);
}
}
}
</script>
<input type="checkbox" id="firstChk"/><br>
<input type="checkbox" name="aihao" vlaue="smoke"/>抽烟<br>
<input type="checkbox" name="aihao" value="drink"/>喝酒<br>
<input type="checkbox" name="aihao" value="tt"/>烫头<br>
</body>
</html>
007-DOM编程-获取下拉列表选中项的value
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>获取下拉列表选中项的value</title>
</head>
<body>
<!--<select id="provinceList" οnchange="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">
window.onload = function () {
var provinceListElt = document.getElementById("provinceList");
provinceListElt.onchange = function () {
// 获取选中项的value
alert(provinceListElt.value);
}
}
</script>
<select id="provinceList">
<option value="">--请选择省份--</option>
<option value="001">河北省</option>
<option value="002">河南省</option>
<option value="003">山东省</option>
<option value="004">山西省</option>
</select>
</body>
</html>
<!--
省份和市区的关系是:1对多,两张表,多的表加外键
省份表t_province
id pcode pname
------------------------------------
1 001 河北省
2 002 河南省
3 003 山东省
4 004 山西省
市区表t_city
id ccode cname pcode(fk)
----------------------------------------------------------
1 101 石家庄 001
2 102 保定 001
3 103 邢台 001
4 104 张家口 001
5 105 邯郸 001
6 106 衡水 001
前端用户选择的是河北省,那么必须获取到河北省的pcode,获取到001,
然后将001发送提交给服务器,服务器执行一条SQL语句:
select * from t_city where pcode = '001';
返回一个list集合,List<City> cityList;
cityList响应浏览器,浏览器再解析cityList集合转换成一个新的下拉列表。
-->
008-DOM编程-显示网页时钟
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>显示网页时钟</title>
</head>
<body>
<script type="text/javascript">
/*
关于JS中内置的支持类,Date,可以用来获取时间/日期
*/
// 获取系统当前时间
var nowTime = new Date();
// 输出
//document.write(nowTime);
// 转换成具有本地语言环境的日期格式。
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 dayOfWeek = 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到当前系统时间的总毫秒数)
var times = t.getTime();
//document.write(times); // 一般会使用毫秒数作为时间戳。(timestamp)
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()函数
function start(){
// 从这行代码执行结束开始,则会不间断的,每隔1000毫秒调用一次displayTime()函数
v = window.setInterval("displayTime(), 1000");
}
function stop(){
window.clearInterval(v);
}
</script>
<br><br>
<input type="button" value="显示系统时间" onclick="start();"/>
<input type="button" value="系统时间停止" onclick="stop();"/>
<div id="timeDiv"></div>
</body>
</html>
009-DOM编程-内置支持类Array
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>内置支持类Array</title>
</head>
<body>
<script type="text/javascript">
/*
// 创建长度为0的数组
var arr = [];
alert(arr.length);
var arr2 = [1,2,3,false,"abc",3.14]; // 最常用
alert(arr2.length); // 6
// 下标越界吗
arr2[7] = "test"; // 自动扩容
// 遍历
for(var i = 0; i < arr2.length; i++){
document.write(arr2[i] + "<br>");
}
// 另外一种创建数组的对象的方式.
var a = new Array();
alert(a.length); // 0
var a2 = new Array(3); // 3表示长度
alert(a2.length); // 3
var a3 = new Array(3,2);// 具体存储的元素3和2
alert(a3.length); // 2
*/
var a = [1,2,3,9];
var str = a.join("-"); // "1-2-3-9"
alert(str);
// 在数组的末尾添加一个元素(数组长度加1)
a.push(10);
alert(a.join("-")); // "1-2-3-9-10"
// 将数组末尾元素弹出
var endElt = a.pop(); // 10
alert(a.join("-")); // "1-2-3-9"
// 注意:JS中的数组可以自动模拟栈数据结构:后进先出,先进后出原则。
// push压栈
// pop弹栈
// 反转数组
a.reverse();
alert(a.join("-")); // "9-3-2-1"
</script>
</body>
</html>