94_JavaWeb_JS2_event_dom_方法_属性

举报
alexsully 发表于 2021/07/12 12:13:41 2021/07/12
【摘要】 事件,DOM属性,方法

JavaScript 事 件 : 输入设备与页面进行交互的响应

常用的事件:
onload 加载完成事件: 页面加载完成之后,常用于做页面 js 代码初始化操作
onclick 单击事件: 常用于按钮的点击响应操作。
onblur 失去焦点事件: 常用用于输入框失去焦点后验证其输入内容是否合法。
onchange 内容发生改变事件: 常用于下拉列表和输入框内容发生改变后操作
onsubmit 表单提交事件: 常用于表单提交前,验证所有表单项是否合法

事件的注册(绑定)
当事件响应后要执行哪些操作代码,叫事件注册或事件绑定。 
静态注册事件:通过 html 标签的事件属性直接赋于事件响应后的代码。 
动态注册事件:是指先通过 js 代码得到标签的 dom 对象,然后再通过 dom 对象.事件名 = function(){} 这种形式赋于事件响应后的代码
动态注册基本步骤:
1、获取标签对象
2、标签对象.事件名 = fucntion(){} 

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>event1</title>
        <script type="text/javascript">
            // 1 onload事件, 页面加载完初始化代码
            //静态
            function funcOnload(){
                alert("静态onload")
            }

            // 动态 // onload事件动态注册。是固定写法
            window.onload = function (){
                alert("动态onload")
            }

           // 2 onclick 单击事件: 常用于按钮的点击响应操作
            function  onclickFun(){
                alert("静态注册onclick事件");
            }

            window.onload = function () {
                // 1、获取标签对象 document 是JavaScript语言提供的一个对象(文档)
                var elementById = document.getElementById("btn01");
                // 2、标签对象.事件名 = fucntion(){}
                elementById.onclick = function () {
                    alert("动态注册的onclick事件");
                }
            }


           // 3 onblur 失去焦点事件: 常用用于输入框失去焦点后验证其输入内容是否合法
            // 静态注册失去焦点事件 常用语表单中
            function onblurFun() {
                // console是控制台对象,是由JavaScript语言提供,专门用来向浏览器的控制器打印输出, 用于测试使用
                // log() 是打印的方法
                console.log("静态注册失去焦点事件");
            }

            // 动态注册 onblur事件 失去焦点事件
            window.onload = function () {
                //1 获取标签对象
                var passwordObj = document.getElementById("password");
                // alert(passwordObj);
                //2 通过标签对象.事件名 = function(){};
                passwordObj.onblur = function () {
                    console.log("动态注册失去焦点事件");
                }
            }

           // 4 onchange 内容发生改变事件: 常用于下拉列表和输入框内容发生改变后操作

            function onchangeFun() {
                alert("GJ已经改变了");
            }

            window.onload = function () {
                //1 获取标签对象
                var selObj = document.getElementById("sel01");
                // alert( selObj );
                //2 通过标签对象.事件名 = function(){}
                selObj.onchange = function () {
                    alert("伴娘已经改变了");
                }
            }

        </script>

    </head>
<!--    <body onload="funcOnload()">-->
    <body>
        <!--静态注册onClick事件-->
        <button onclick="onclickFun();">按钮_静态点击</button>
        <button id="btn01">按钮_动态点击</button>

        <br>
        <br>
        用户名:<input type="text" onblur="onblurFun();"><br/>
        密码:<input id="password" type="text" ><br/>
        <br>
        <br>
        <select onchange="onchangeFun();">
            <option>--国家--</option>
            <option>意大利</option>
            <option>英国</option>
            <option>日本</option>
        </select>

        <br>
        <br>
        <select  id="sel01">
            <option >伴娘</option>
            <option >姐夫</option>
            <option >B哥</option>
            <option >李心</option>
        </select>
    </body>
</html>
        GET请求的特点是:
            1、浏览器地址栏中的地址是:action属性[+?+请求参数] 请求参数的格式是:name=value&name=value
            2、不安全
            3、它有数据长度的限制

        POST请求的特点是:
            1、浏览器地址栏中只有action属性值
            2、相对于GET请求要安全
            3、理论上没有数据长度的限制

onsubmit

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" >
        // 静态注册表单提交事务
        function onsubmitFun(){
            // 要验证所有表单项是否合法,如果,有一个不合法就阻止表单提交
            alert("静态注册表单提交事件----发现不合法");

            return flase;
        }

        window.onload = function () {
            //1 获取标签对象
            var formObj = document.getElementById("form01");
            //2 通过标签对象.事件名 = function(){}
            formObj.onsubmit = function () {
                // 要验证所有表单项是否合法,如果,有一个不合法就阻止表单提交
                alert("动态注册表单提交事件----发现不合法");

                return false;
            }
        }

    </script>
</head>
<body>
    <!--return false 可以阻止 表单提交 -->
    <form action="http://localhost:8080" method="get" onsubmit="return onsubmitFun();">
        <input type="submit" value="静态注册"/>
    </form>
    <form action="http://localhost:8080" id="form01">
        <input type="submit" value="动态注册"/>
    </form>

</body>
</html>

DOM 模型  Document Object Model 文档对象模型
把文档中的标签,属性,文本,转换成为对象来管理

Document 对象的理解:
第一点:Document 它管理了所有的 HTML 文档内容
第二点:document 它是一种树结构的文档,有层级关系
第三点:它让我们把所有的标签 都 对象化
第四点:我们可以通过 document 访问所有的标签对象

方法介绍
document.getElementById(elementId) 通过标签的id属性查找标签 dom 对象,elementId 是标签的id属性值
document.getElementsByName(elementName)通过标签的name属性查找标签dom对象,elementName标签的name属性值
document.getElementsByTagName(tagname) 通过标签名查找标签dom对象,tagname 是标签名
document.createElement( tagName)方法,通过给定的标签名,创建一个标签对象,tagName 是要创建的标签

注:
document 对象的三个查询方法,如果有 id 属性,优先使用 getElementById 方法来进行查询
如果没有 id 属性,则优先使用getElementsByName方法来进行查询
如果id属性和name属性都没有最后再按标签名查 getElementsByTagName
以上三个方法,一定要在页面加载完成之后执行,才能查询到标签对象

正则

    <script type="text/javascript">
        // 表示要求字符串中,是否包含字母e
        // var patt = new RegExp("e");
        // var patt = /e/; // 也是正则表达式对象
        // 表示要求字符串中,是否包含字母a或b或c
        // var patt = /[abc]/;
        // 表示要求字符串,是否包含小写字母
        // var patt = /[a-z]/;
        // 表示要求字符串,是否包含任意大写字母
        // var patt = /[A-Z]/;
        // 表示要求字符串,是否包含任意数字
        // var patt = /[0-9]/;
        // 表示要求字符串,是否包含字母,数字,下划线
        // var patt = /\w/;
        // 表示要求 字符串中是否包含至少一个a
        // var patt = /a+/;
        // 表示要求 字符串中是否 *包含* 零个 或 多个a
        // var patt = /a*/;
        // 表示要求 字符串是否包含一个或零个a
        // var patt = /a?/;
        // 表示要求 字符串是否包含连续三个a
        // var patt = /a{3}/;
        // 表示要求 字符串是否包 至少3个连续的a,最多5个连续的a
        // var patt = /a{3,5}/;
        // 表示要求 字符串是否包 至少3个连续的a,
        // var patt = /a{3,}/;
        // 表示要求 字符串必须以a结尾
        // var patt = /a$/;
        // 表示要求 字符串必须以a打头
        // var patt = /^a/;

        // 要求字符串中是否*包含* 至少3个连续的a  最小匹配即可,非从头到尾
        // var patt = /a{3,5}/;
        // 要求字符串,从头到尾都必须完全匹配
        // var patt = /^a{3,5}$/;

        var patt = /^\w{5,12}$/;
        var str = "wzg168[[[";
        alert( patt.test(str) );

    </script>

getElementById

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>event3</title>
        <script type="text/javascript">
            function onclickFun() {
                // 1 当我们要操作一个标签的时候,一定要先获取这个标签对象。
                var usernameObj = document.getElementById("username"); // [object HTMLInputElement] 它就是dom对象
                var usernameText = usernameObj.value;
                // 如何 验证 字符串,符合某个规则 ,需要使用正则表达式技术
                var patt = /^\w{5,12}$/;
                /*
                *  test()方法用于测试某个字符串,是不是匹配我的规则 ,
                *  匹配就返回true。不匹配就返回false.
                * */
                var usernameSpanObj = document.getElementById("usernameSpan");
                // innerHTML 表示起始标签和结束标签中的内容
                // innerHTML 这个属性可读,可写
                // usernameSpanObj.innerHTML = "姐夫真可爱!";

                if (patt.test(usernameText)) {
                    // alert("用户名合法!");
                    // usernameSpanObj.innerHTML = "用户名合法!";
                    usernameSpanObj.innerHTML = "<img src=\"right.png\" width=\"18\" height=\"18\">";
                } else {
                    // alert("用户名不合法!");
                    // usernameSpanObj.innerHTML = "用户名不合法!";
                    usernameSpanObj.innerHTML = "<img src=\"wrong.png\" width=\"18\" height=\"18\">";
                }
            }
        </script>

    </head>
    <body>

        用户名:<input type="text" id="username" value="jiefu"/>
        <span id="usernameSpan" style="color:red;">  <!-- 不换行 一个单元格 -->

        </span>
        <button onclick="onclickFun()">较验</button>

    </body>
</html>

getElementByName

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>event4</title>

        <script type="text/javascript">
            // 让所有复选框都选中 document.getElementsByName();是根据 指定的name属性查询返回多个标签对象集合
            // 这个集合的操作跟数组 一样; 集合中每个元素都是dom对象
            // 这个集合中的元素顺序是他们在html页面中从上到下的顺序
            function checkAll (){
                var hobbies = document.getElementsByName("hobby");
                for (var i = 0; i < hobbies.length; i++) {
                    hobbies[i].checked = true;
                }
            }

            // 全不选
            function checkNo (){
                // checked表示复选框的选中状态。如果选中是true,不选中是false
                // checked 这个属性可读,可写
                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++) {
                    hobbies[i].checked = !hobbies[i].checked;
                }
            }

        </script>

    </head>
    <body>
        兴趣爱好:
        <input type="checkbox" name="hobby" value="cpp" checked="checked">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>
</html>

getElementByTagName

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>bytagname</title>
        <script type="text/javascript">
            // document.getElementsByTagName("input");
            // 是按照指定标签名来进行查询并返回集合;这个集合的操作跟数组 一样
            // 集合中都是dom对象
            // 集合中元素顺序 是他们在html页面中从上到下的顺序。
            function checkAll(){
                var tags = document.getElementsByTagName("input");
                // var tags = document.getElementsByTagName("input");
                for (var i = 0; i < tags.length; i++) {
                    tags[i].checked = true ;
                }
            }

        </script>
    </head>
    <body>
        兴趣爱好:
        <input type="checkbox" value="cpp" checked="checked">C++
        <input type="checkbox" value="java">Java
        <input type="checkbox" value="js">JavaScript

        <br/>
        <button onclick="checkAll()">全选</button>


    </body>
</html>

节点的常用属性和方法

方法
getElementsByTagName()方法 获取当前节点的指定标签名孩子节点
appendChild( oChildNode )方法,可以添加一个子节点,oChildNode 

属性

childNodes属性,获取当前节点的所有子节点
firstChild属性,获取当前节点的第一个子节点
lastChild属性,获取当前节点的最后一个子节点
parentNode属性,获取当前节点的父节点
nextSibling属性,获取当前节点的下一个节点
previousSibling属性,获取当前节点的上一个节点
className 用于获取或设置标签的 class 属性值
innerHTML属性,表示获取/设置起始标签和结束标签中的内容
innerText属性,表示获取/设置起始标签和结束标签中的文本

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>dom查询</title>
<link rel="stylesheet" type="text/css" href="style/css.css" />
<script type="text/javascript">
	window.onload = function(){
		//1.查找#bj节点
		document.getElementById("btn01").onclick = function () {
			var bjObj = document.getElementById("bj");
			alert(bjObj.innerHTML);
		}
		//2.查找所有li节点
		var btn02Ele = document.getElementById("btn02");
		btn02Ele.onclick = function(){
			var lis = document.getElementsByTagName("li");
			alert(lis.length)
		};
		//3.查找name=gender的所有节点
		var btn03Ele = document.getElementById("btn03");
		btn03Ele.onclick = function(){
			var genders = document.getElementsByName("gender");
			alert(genders.length)
		};
		//4.查找#city下所有li节点
		var btn04Ele = document.getElementById("btn04");
		btn04Ele.onclick = function(){
			//1 获取id为city的节点
			//2 通过city节点.getElementsByTagName按标签名查子节点
			var lis = document.getElementById("city").getElementsByTagName("li");
			alert(lis.length)
		};
		//5.返回#city的所有子节点
		var btn05Ele = document.getElementById("btn05");
		btn05Ele.onclick = function(){
			//1 获取id为city的节点
			//2 通过city获取所有子节点
			alert(document.getElementById("city").childNodes.length);
		};
		//6.返回#phone的第一个子节点
		var btn06Ele = document.getElementById("btn06");
		btn06Ele.onclick = function(){
			// 查询id为phone的节点
			alert( document.getElementById("phone").firstChild.innerHTML );
		};
		//7.返回#bj的父节点
		var btn07Ele = document.getElementById("btn07");
		btn07Ele.onclick = function(){
			//1 查询id为bj的节点
			var bjObj = document.getElementById("bj");
			//2 bj节点获取父节点
			alert( bjObj.parentNode.innerHTML );
		};
		//8.返回#android的前一个兄弟节点
		var btn08Ele = document.getElementById("btn08");
		btn08Ele.onclick = function(){
			// 获取id为android的节点
			// 通过android节点获取前面兄弟节点
			alert( document.getElementById("android").previousSibling.innerHTML );
		};
		//9.读取#username的value属性值
		var btn09Ele = document.getElementById("btn09");
		btn09Ele.onclick = function(){
			alert(document.getElementById("username").value);
		};
		//10.设置#username的value属性值
		var btn10Ele = document.getElementById("btn10");
		btn10Ele.onclick = function(){
			document.getElementById("username").value = "国哥你真牛逼";
		};
		//11.返回#bj的文本值
		var btn11Ele = document.getElementById("btn11");
		btn11Ele.onclick = function(){
			alert(document.getElementById("city").innerHTML);
			// alert(document.getElementById("city").innerText);
		};
	};
</script>
</head>
<body>
<div id="total">
	<div class="inner">
		<p>
			你喜欢哪个城市?
		</p>

		<ul id="city">
			<li id="bj">北京</li>
			<li>上海</li>
			<li>东京</li>
			<li>首尔</li>
		</ul>

		<br>
		<br>

		<p>
			你喜欢哪款单机游戏?
		</p>

		<ul id="game">
			<li id="rl">红警</li>
			<li>实况</li>
			<li>极品飞车</li>
			<li>魔兽</li>
		</ul>

		<br />
		<br />

		<p>
			你手机的操作系统是?
		</p>

		<ul id="phone"><li>IOS</li><li id="android">Android</li><li>Windows Phone</li></ul>
	</div>

	<div class="inner">
		gender:
		<input type="radio" name="gender" value="male"/>
		Male
		<input type="radio" name="gender" value="female"/>
		Female
		<br>
		<br>
		name:
		<input type="text" name="name" id="username" value="abcde"/>
	</div>
</div>
<div id="btnList">
	<div><button id="btn01">查找#bj节点</button></div>
	<div><button id="btn02">查找所有li节点</button></div>
	<div><button id="btn03">查找name=gender的所有节点</button></div>
	<div><button id="btn04">查找#city下所有li节点</button></div>
	<div><button id="btn05">返回#city的所有子节点</button></div>
	<div><button id="btn06">返回#phone的第一个子节点</button></div>
	<div><button id="btn07">返回#bj的父节点</button></div>
	<div><button id="btn08">返回#android的前一个兄弟节点</button></div>
	<div><button id="btn09">返回#username的value属性值</button></div>
	<div><button id="btn10">设置#username的value属性值</button></div>
	<div><button id="btn11">返回#bj的文本值</button></div>
</div>
</body>
</html>

 

@CHARSET "UTF-8";

body {
	width: 800px;
	margin-left: auto;
	margin-right: auto;
}

button {
	width: 300px;
	margin-bottom: 10px;
}

#btnList {
	float:left;
}

#total{
	width: 450px;
	float:left;
}

ul{
	list-style-type: none;
	margin: 0px;
	padding: 0px;
}

.inner li{
	border-style: solid;
	border-width: 1px;
	padding: 5px;
	margin: 5px;
	background-color: #99ff99;
	float:left;
}

.inner{
	width:400px;
	border-style: solid;
	border-width: 1px;
	margin-bottom: 10px;
	padding: 10px;
	float: left;
}





【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。