JavaScript(DOM编程二)

Posted 乔克叔叔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript(DOM编程二)相关的知识,希望对你有一定的参考价值。

文档加载完毕之后,在Window.onload方法中创建元素节点,添加到DOM文档中

代码演示:

<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript">
        window.onload=function(){
            alert("运行前。。。。。")
            //创建一个元素节点 参数是元素节点的名称 li <li></li>
            var linode=document.createElement("li");
            //创建一个文本节点 参数即为文本节点中的字符串  厦门
            var textnode=document.createTextNode("厦门");
            //把该文本节点加入到元素节点中  <li>厦门<li>
            linode.appendChild(textnode);

            //把linode加入到首尔的后面:
            var city=document.getElementById("city");
            city.appendChild(linode);
            alert("运行后。。。。。");
        }

    </script>
</head>
<body>
<p>你喜欢哪个城市?</p>
<ul id="city"><li id="bj" name="BeiJing">北京</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>
gender:
<input type="radio" name="gender" value="male"/>Male
<input type="radio" name="gender" value="female"/>Female

<br><br>
name: <input type="text" name="username" value="atguigu"/>

</body>

</html>

运行效果:

单击确定

----------------------------------------------

 判断某个节点是否存在某个属性

    <script type="text/javascript">
        window.onload=function(){
            var v1=document.getElementById("bj");//获得li为北京的元素节点
            var v2=document.getElementsByTagName("li")[1];//获得li为上海的元素节点;
            //判断这两个节点是否存在id属性
            if(v1.id){
                alert("v1节点存在id属性");
            }else{
                alert("v1节点不存在id属性");
            }
            if(v2.id){
                alert("v2节点存在id属性");
            }else{
                alert("v2节点不存在id属性");
            }
        }

    </script>

程序运行结果:

-------------------------------------------------------

 实验一:

需求: 点击 submit 按钮时, 检查是否选择 type, 若没有选择给出提示: "请选择类型";
检查文本框中是否有输入(可以去除前后空格), 若没有输入,则给出提示: "请输入内容";

页面效果:

基本代码:

<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>

<form action="text5.html" name="myform">

    <input type="radio" name="type" value="city">城市
    <input type="radio" name="type" value="game">游戏

    name: <input type="text" name="name"/>

    <input type="submit" value="Submit" id="submit"/>

</form>

思路过程:

<script type="text/javascript">
		
		//需求: 点击 submit 按钮时, 检查是否选择 type, 若没有选择给出提示: "请选择类型"; 
		//     检查文本框中是否有输入(可以去除前后空格), 若没有输入,则给出提示: "请输入内容";
		//若检查都通过, 则在相应的 ul 节点中添加对应的 li 节点 
		
		window.onload = function(){
			
			
			//1. 获取 #submit 对应的按钮 submitBtn
			var submit = document.getElementById("submit");
			
			//2. 为 submitBtn 添加 onclick 响应函数
			submit.onclick = function(){
				
				//4. 检查是否选择 type, 若没有选择给出提示: "请选择类型"
				//4.1 选择所有的 name="type" 的节点 types
				var types = document.getElementsByName("type");
				
				//4.2 遍历 types, 检查其是否有一个 type 的 checked 属性存在, 就可说明
				//有一个 type 被选中了: 通过  if(元素节点.属性名) 来判断某一个元素节点是否有
				//该属性.
				var typeVal = null;
				for(var i = 0; i < types.length; i++){
					if(types[i].checked){
						typeVal = types[i].value;
						break;
					}
				}
				
				//4.3 若没有任何一个 type 被选中, 则弹出: "请选择类型". 响应方法结束: 
				//return false
				if(typeVal == null){
					alert("请选择类型");
					return false;
				}
				
				//5. 获取 name="name" 的文本值: 通过 value 属性: nameVal 
				var nameEle = document.getElementsByName("name")[0];
				var nameVal = nameEle.value;
				
				//6. 去除 nameVal 的前后空格. 
				var reg = /^\\s*|\\s*$/g;
				nameVal = nameVal.replace(reg, "");
				
				//使 name 的文本框也去除前后空格. 
				nameEle.value = nameVal;
				
				//6. 把 nameVal 和 "" 进行比较, 若是 "" 说明只出入了空格, 弹出 "请输入内容"
				//方法结束: return false
				if(nameVal == ""){
					alert("请输入内容");
					return false;
				}
				
				//7. 创建 li 节点
				var liNode = document.createElement("li");
				
				//8. 利用 nameVal 创建文本节点
				var content = document.createTextNode(nameVal);
				
				//9. 把 8 加为 7 的子节点
				liNode.appendChild(content);
				
				
				//10. 把 7 加为选择的 type 对应的 ul 的子节点
				document.getElementById(typeVal)
				        .appendChild(liNode);
				
				//3. 在 onclick 响应函数的结尾处添加 return false, 就可以取消提交按钮的
				//默认行为. 
				return false;
			}
		}
	
	</script>

  具体实施:

 1     <script type="text/javascript">
 2         window.onload=function(){
 3             //需求: 点击 submit 按钮时, 检查是否选择 type, 若没有选择给出提示: "请选择类型";
 4             //     检查文本框中是否有输入(可以去除前后空格), 若没有输入,则给出提示: "请输入内容";
 5             //若检查都通过, 则在相应的 ul 节点中添加对应的 li 节点
 6 
 7             //一。先获取对应的按钮
 8             var submit=document.getElementById("submit");
 9             //然后为他绑定onclick事件
10             submit.onclick=function(){
11                 //获得单选节点 通过type属性获得
12                 var radionode=document.getElementsByName("type");
13                 //循环遍历  得到选择的某个按钮的value值
14                 var radionodetype =null;
15                 for(var i=0;i<radionode.length;i++){
16                     if(radionode[i].checked){//存在checked属性
17                         radionodetype=radionode[i].value;//获得选中的按钮的value值
18                         break;
19                     }
20                 }
21                 //判断是否 radionodetype的值仍然为空  为空则 说明用户没单击任何的按钮  弹窗提示  然后停止
22                 if(radionodetype==null){
23                     alert("请选择类型。。。。。。");
24                     return false;
25                 }
26 
27                 //二。获得元素节点 是它的子节点是文本  通过name属性
28                 var textnode=document.getElementsByName("name")[0];
29                // alert(textnode);
30                 //得到输入的文本内容
31                 var textcontext=textnode.value;
32                // alert(textcontext);
33 
34                 //正则表达式  去掉前后的空格
35                 var zheze=/^\\s*|\\s*$/g;
36                 textcontext=textcontext.replace(zheze,"");
37                 //使文本框中的内容也去掉前后空格  不然在下次输入的时候光标不是在文本框的开始位置(主要还是没有实现跳页 所以数据会一直到页面上  如果再次条到本页  那么上一次输入的数据将消失)
38                 textnode.value=textcontext;
39                 if(textcontext==""){
40                     alert("输入的内容不能为空 或者是空格");
41                     return false;
42                 }
43 
44 
45                 //创建元素节点,为之后的节点插入做准备
46                 var linode=document.createElement("li");
47                 //创建文本节点,
48                 var textnode=document.createTextNode(textcontext)//参数就是用户输入的值  去掉空格之后 不用担心内容为"" 如果为“” 那么代码根本执行不到这里
49                 //把该文本节点的内容设置进上面创建的元素节点中
50                 linode.appendChild(textnode);
51 
52                 //根据选择的类型radionodetype的值 先得到相应的li节点集合
53                 var lilist=document.getElementById(radionodetype);
54                 //为集合添加一条元素节点<li><li>
55                 lilist.appendChild(linode);
56 
57 
58                 return false;//即使用户输入的内容都合法 也不让其跳页
59             }
60         }
61 
62     </script>

运行效果展示:

1.什么都不输入,单击提交

2.选择类型之后,文本中没有输入任何的内容,单击提交

3.选择类型,并且输入带空格的字符

提交之后

 

----------------------------------------------------------------

 现在在上面代码的基础上,增加一个功能,就是单击相应的文本,弹出该文本的内容,刚刚添加的文本也要具有该项功能

需求2: 使包括新增的 li 都能响应 onclick 事件: 弹出 li 的文本值.

 1  <script type="text/javascript">
 2         window.onload=function(){
 3             //需求: 点击 submit 按钮时, 检查是否选择 type, 若没有选择给出提示: "请选择类型";
 4             //     检查文本框中是否有输入(可以去除前后空格), 若没有输入,则给出提示: "请输入内容";
 5             //若检查都通过, 则在相应的 ul 节点中添加对应的 li 节点
 6 
 7             //无论是否用户添加了新的节点,用户点击时都能产生单击事件  所以需求2的代码至少在文档加载完毕之后就应该执行  所以应该放在onload方法体中的最上边
 8             function showtext(node){//这里边不需要确定参数的类型,因为JavaScript的参数类型是弱类型的 即函数参数不需要类型
 9                 alert(node.firstChild.nodeValue);
10             }
11             //1为每一个文本都定义单击事件
12             var testonclick=document.getElementsByTagName("li");//得到所有的li节点  元素节点  想要得到本节点需要使用firstchild才可以
13             //循环定义单击事件
14             for(var i=0;i<testonclick.length;i++){
15                 testonclick[i].onclick= function () {
16                     showtext(this);
17                 }
18             }
19 
20             //一。先获取对应的按钮
21             var submit=document.getElementById("submit");
22             //然后为他绑定onclick事件
23             submit.onclick=function(){
24                 //获得单选节点 通过type属性获得
25                 var radionode=document.getElementsByName("type");
26                 //循环遍历  得到选择的某个按钮的value值
27                 var radionodetype =null;
28                 for(var i=0;i<radionode.length;i++){
29                     if(radionode[i].checked){//存在checked属性
30                         radionodetype=radionode[i].value;//获得选中的按钮的value值
31                         break;
32                     }
33                 }
34                 //判断是否 radionodetype的值仍然为空  为空则 说明用户没单击任何的按钮  弹窗提示  然后停止
35                 if(radionodetype==null){
36                     alert("请选择类型。。。。。。");
37                     return false;
38                 }
39 
40                 //二。获得元素节点 是它的子节点是文本  通过name属性
41                 var textnode=document.getElementsByName("name")[0];
42                // alert(textnode);
43                 //得到输入的文本内容
44                 

以上是关于JavaScript(DOM编程二)的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 将片段附加到DOM而不是每个节点。

译文:18个实用的JavaScript代码片段,助你快速处理日常编程任务

Javascript DOM 编程艺术———总结-2

JavaScript DOM编程艺术 - 读书笔记

html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma

JavaScript性能优化 DOM编程