DOM基础

本文内容是根据毕晓东老师的视频教程总结而得。DOM相关基础知识。

1.DOM概述

Document Object Model(文档对象模型),主要用来将标记型文档封装成对象,并将标记型文档中所有的内容(标签、文本、属性等)都封装成对象。

封装成对象的目的:为了更方便的操作这些文档以及文档中的所有内容。因为对象的出现就可以有属性和行为被调用。

标记型文档特征:除了标签就是标签封装的内容或者标签的属性。

文档:标记型文档;

对象:封装了属性和行为的实例,可以被直接调用;

模型:所有标记型文档都具备一些共性特征的一个体现。

标记型文档:标签、标签中的属性、标签中封装的数据。

只要是标记型文档,DOM这种技术都可以对其进行操作。

常见的标记型文档:HTML、xml

DOM如何对标记型文档进行操作?

要操作标记型文档必须对其进行解析。

DOM技术的解析方式:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>DOM演示</title>

</head>

<body>

  <div>div区域</div>

  <dl>

     <dt>上层项目</dt>

     <dd>下层项目</dd>

  </dl>

  <table>

    <tr>

      <th>表头</th>

      <td>单元格</td>

    </tr>

  </table>

  <form>

    <input type="text"/>

  </form>

</body>

</html>

一读取到这个HTML文档时,就将这个文档封装成了Document对象,然后对各标签层次进行更细致的划分。标签、属性、标签里的数据。

图解:DOM解析将按照标签的层次关系体现出标签的所属。形成一个树状结构。书中的标签以及文本设置属性称为节点,也成为对象,标签通常也成为页面中的元素。可以动态添加或删除页面的各个节点。

2.DOM解析的特点

DOM解析方式:将标记型文档解析成一颗DOM树,并将书中的内容都封装成节点对象。

注意:DOM解析方式的好处:可以对树中的节点进行任意操作,如增删改查。

弊端:这种解析需要将整个标记型文档加载进内存,意味着如果标记型文档体积很大,较为浪费内存空间。

另一种解析方式:SAX。是由一些组织定义的一种民间常用的解析方式,并不是w3c标准,而DOM是w3c的标准。

SAX解析方式:基于时间驱动的解析。

读这个文档,读到标签的开始时即触发一个事件,然后去读取里面的内容,当读取到结束标签时,事件触发结束。

用SAX解析获取数据的速度很快,但是不能对标记进行增删改动作,可以查。

3.DOM三级模型

DOM level 1:将HTML文档封装成对象;

DOM level 2:在level1基础上加入了一些新功能,如解析名称空间(一个页面都使用多个同名标签,但是含义不一样,就需要给标签定义新的名称空间,即不同的包来存放,也可使用唯一标识即域名)。如xmlns=”my”或xmlns=http://www.sina.com.cn

DOM level 3:将xml文档封装成了对象。

4.DHTML概述

DHTML:动态的HTML。不是一门语言,是多项技术综合体的简称。HTML+CSS是静态页面。

多项技术包括:HTML、CSS、DOM、JavaScript。

这四种技术在动态HTML页面效果定义时,都处于什么角色?负责什么职责?

HTML:负责提供标签对数据进行封装,目的是便于对该标签中的数据进行操作。简单说,用标签封装数据。

CSS:提供样式属性,对标签中的数据进行样式的定义。简单说,对数据进行样式定义。

DOM:负责将标记型文档(标签型文档)以及文档中的所有内容进行解析,并封装成对象。在对象中定义了更多的属性和行为,便于对对象进行操作。简单说,将文档和标签以及其他内容变成对象。

JS:负责提供程序设计语言对页面中的对象进行逻辑操作。简单说,负责页面行为定义。即页面的动态效果。所以JS是动态效果的主力编程语言。

DHMTL+XMLhttpRequest = Ajax

5.BOM&Navigator对象&History对象

浏览器本身也可以让它进行动态效果的产生。

BOM:Browser Object Model(浏览器对象模型),这个模型方便与操作浏览器。

浏览器对应的对象就是window对象,这个可以通过查阅DHTML API获得。

Navigator对象的所有方法:

示例:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>DOM中的window对象</title>

<script src="../js/out.js" type="text/javascript"></script>

</head>

<body>

  <!-- 为了演示方便,定义一个事件源,通过对事件源的触发,获取想要的结果。

  比如用户通过点击按钮就可以知道浏览器的一些信息 -->

  <!-- 定义时间源,注册时间关联的动作 。事件:onclick 事件处理方式是一个函数,功能定义必须使用JS

  如果页面功能只为了除了某几个内容,可以放在标签附近,如果要处理很多内容,要放在head标签里-->

  <!-- 定义按钮onclick事件的处理方式 -->

 <script type="text/javascript">

    function windowObjDemo(){

       //想要知道浏览器的信息,就需要使用window对象中的Navigator对象,一打开浏览器Navigator对象就在window中存在了

       var name = window.navigator.appName;

       var version = window.navigator.appVersion;

       println(name);

       println(version);

    }

  </script>

  <input type="button" value="演示DOMwindow中的对象" onclick="windowObjDemo()"/>

</body>

</html>

结果:

window对象本身是存在的,所以使用时可以不写window.直接使用navigator.

 

History对象:浏览器的前进后退

6.Location对象

代表地址栏。可以通过地址栏和服务端进行交互

和java中的URL对象相似

Location对象里的属性既可以获取也可以设置。

Location对象中的方法:

//演示location

    function windowObjDemo2(){

       var protocol = location.protocol;

       var href = location.href;

       println("protocol:"+protocol);

       println("href:"+href);

       //Location对象的href属性设置一个值。改变地址栏,并对其值进行解析,如果http,还进行连接访问

       location.href = "http://www.sina.com.cn";

    }

结果:

7.window常见方法1

 

结果:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>window 对象中的方法</title>

<script src="../js/out.js" type="text/javascript"></script>

<script type="text/javascript">

function windowMethod(){

   var b = confirm("你真的确认点击吗?");

   alert(b);

}

</script>

</head>

<body>

<input type="button" value="演示DOMwindow中的对象" onclick="windowMethod()"/>

</body>

</html>

结果:

Integer setTimeout(表达式,millSeconds):设置定时执行

//设置4秒后,执行某表达

   setTimeout("alert('timeout set')",4000);

setInterval(表达式,毫秒值):每隔多少毫秒都会执行

clearTimeout()

clearInterval()清除对应形式,参数是setInterval的返回值

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>window 对象中的方法</title>

<script src="../js/out.js" type="text/javascript"></script>

<script type="text/javascript">

var timeid;

function windowMethod(){

   //设置4秒后,执行某表达式

   timeid = setInterval("alert('timeout set')",4000);

}

function clearwindowMethod(){

   clearInterval(timeid);

}

</script>

</head>

<body>

<input type="button" value="演示DOMwindow中的对象" onclick="windowMethod()"/>

<input type="button" value="清除DOMwindow中的对象" onclick="clearwindowMethod()"/>

 

</body>

</html>

 

moveBy(横坐标,纵坐标)方法:坐标移动窗口(指定偏移量)

moveTo(x,y)直接移动到指定的坐标点

resizeBy()调整窗口大小

resizeTo()

8.window常见方法2

scrollBy:调节滚动条

scrollTo

close():能被close的必须是新开的窗口,当前窗口没有效果

open():以指定方式打开一个窗体,并指定窗体的样式

function openWindow(){

open("ss.html","_blank","height=200,width=400,status=yes,toolbar=yes,menubar=yes,location=yes");

}

<input type="button" value="openWindow" onclick="openWindow()"/>

 

新开的页面:可以设置定时关闭。注意当前窗口使用定时关没有效果

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<script type="text/javascript">

 setTimeout("close()",3000);

</script>

</head>

<body>

  <h1>年底大酬宾</h1>

  快来够买吧

</body>

</html>

9.window常见事件

onfocus():获取焦点

onload():页面里所有图片文字等数据加载完后(再次刷新时也会触发),立即触发

onunload():关闭浏览器、页面刷新时,窗口还在就会调用

onbeforeunload():当数据不要(关闭窗口、刷新页面)的时候触发

注意不同浏览器各个效果会不一样

//当事件触发时,触发一个函数

 onunload = function(){

    alert("onunload run");

 }

 onload = function(){

    alert("onload run");

 }

 onbeforeunload = function(){

    alert("onbeforeunload run");

 }

onload事件中一旦加载完毕,再设置窗体样式

onunload = function(){

    window.status = "加载完毕";

 }

10.练习——广告弹窗

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>广告弹窗练习</title>

<script src="../js/out.js" type="text/javascript"></script>

<script type="text/javascript">

//演示广告弹窗效果,页面一加载完就执行,在当前页面定义脚本,可以再onload事件中完成广告的弹窗

onload = function(){

open("ss.html","_blank","height=200,width=400,status=no,toolbar=no,menubar=no,location=no");

}

</script>

</head>

<body>

</body>

</html>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<script type="text/javascript">

 //setTimeout("close()",3000);

 onunload = function(){

   open("ss.html","_blank","height=200,width=400,status=no,toolbar=no,menubar=no,location=no");

 }

 //每秒获取一次焦点,不能关闭也不能最小化

 setTimeout("focus()",1000);

</script>

</head>

<body>

  <h1>年底大酬宾</h1>

  快来够买吧

</body>

</html>

结果:弹窗窗口后关闭不了也缩小不了,且每秒获取一次焦点(每秒弹出来一次)

 

11.document获取节点byID

该对象将标记型文档进行封装,该对象的作用,是对标记型文档进行操作,最常见的操作就是,想要实现动态效果,需要对节点操作,那么就要获取到这个节点,要想获取节点,就需要先获取到节点所属的文档对象document。

获取节点的方法:

getElementById():通过标签的id获取该标签节点,返回该标签节点对象

getElementsByName():通过标签的name获取该标签节点,因为name属性可相同,所以返回的是一个数组(容器)。

getElementsByTagName():通过标签的标签名TagName获取该标签节点,因为Tag有重复,所以返回的是数组。

节点都有三个必备的属性:节点名称、节点类型、节点值

常见节点有三种:

标签型节点:类型1

属性节点:类型2

文本节点:类型3

值:标签型节点没有值,属性和文本节点是可以有值的。

获取到节点后,再获取节点的文本:

innerText():只支持IE

innerHtml():IE和FireFox都支持

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>获取节点byId</title>

<script src="../js/out.js" type="text/javascript"></script>

<script type="text/javascript">

function getNodeId(){

   var divNode = document.getElementById("divId");

   alert(divNode.nodeName+":"+divNode.nodeType+":"+divNode.nodeValue);

   //获取到节点后,再获取节点的文本

   var text1 = divNode.innerHTML;

   alert(text1);

   //修改div的文本区

   var text = divNode.innerHTML = "哈哈,文本被修改了";

   alert(text);

}

</script>

</head>

<body>

  <input type="button" value="获取节点" onclick="getNodeId()"/>

  <div id="divId" name="divname" value="asdf">这是一个div区域</div>

</body>

</html>

结果:

 

12.document获取节点byName

getElementsByName():通过标签的name获取该标签节点,因为name属性可相同,所以返回的是一个数组(容器)。

function getNodeName(){

   var nodes = document.getElementsByName("user");

   alert(nodes+":"+nodes[0].type);

}   

<input type="button" value="获取节点" onclick="getNodeName()"/>

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

结果:

获取表单的值:

alert(nodes+":"+nodes[0].value);

或者

var userNode = document.getElementsByName("user")[0];

    alert(userNode.value);

13.document获取节点byTagName

既没有ID也没有name时,可通过标签名获取节点

getElementsByTagName():通过标签的标签名TagName获取该标签节点,因为Tag有重复,所以返回的是数组。

function getNodeByTagName(){

   var nodes = document.getElementsByTagName("a");

    alert(nodes[0].innerHTML);

}

<input type="button" value="获取节点" onclick="getNodeByTagName()"/>

  <a href="http://www.baidu.com">百度</a>

<a href="http://www.sina.com.cn">新浪</a>

结果:

可以拿到所有的Tag标签后,再设置所有tag设置属性。如:

nodes[0].target = "_blank";

14.document获取节点byTagName2

只想获取一部分超链接怎么做?

通过对div对象方法的查找发现它也具备getElementsByTagName方法,所以所有容器型标签都具备该方法,在该标签范围内获取指定名称的标签。

<a href="http://www.baidu.com">百度</a>

  <a href="http://www.sina.com.cn">新浪</a>

  <div id="links">

   <a href="http://www.baidu.com">百度1</a>

  <a href="http://www.sina.com.cn">新浪1</a>

   <a href="http://www.baidu.com">百度2</a>

  <a href="http://www.sina.com.cn">新浪3</a>

  </div>

//获取超链接所属的div

    var nodes = document.getElementById("links");

    //通过div下的getElementsByTagName获取所有超链接

    var aNodes = nodes.getElementsByTagName("a");

    alert(aNodes[0].innerHTML);

15.通过节点层次关系获取节点

关系:

父节点:只代表一个节点对象,用属性就可以完成。parentNode

子节点:一个节点有多个子节点。childNodes对应一组节点集合

兄弟节点:上一个兄弟节点previousSibling;下一个兄弟节点nextSibling

没有浏览器DOM解析方式不一样

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>通过节点关系的层次关系获取节点对象</title>

<script src="../js/out.js" type="text/javascript"></script>

<script type="text/javascript">

  function getNodes(){

     //获取页面中的表格

     var tabNode = document.getElementById("tabId");

     //获取父节点parentNodes

   /*   var parentNodes = tabNode.parentNode;

     alert("parentNodes:"+parentNodes); */

     //获取子节点childNodes

    /*  var nodes = tabNode.childNodes;

     alert(nodes[0]); */

     //获取兄弟节点

     var node = tabNode.previousSibling;

     alert("node:"+node.nodeName);

     var node1 = tabNode.nextSibling;

     alert("node1:"+node1.nodeName);

  }

</script>

</head>

<body>

 <input type="button" value="通过节点关系的层次关系获取节点对象" onclick="getNodes()"/>

 <div>div区域</div>

  <table id="tabId">

    <tr>

      <th>表头</th>

      <td>单元格</td>

    </tr>

  </table>

</body>

</html>

由于内核不一样, Chrome觉得div节点是一个文本,所以是一个文本节点。如果是IE会直接显示DIV。所以在使用节点时尽量少用兄弟节点,因为解析时会出现浏览器不同解析不一致情况。

16.节点操作——创建并添加1

思路:1,创建一个文本节点createTextNode 

2,获取div_1节点 

3,将文本节点添加到div节点中appendChild

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>创建并添加节点</title>

<script src="../js/out.js" type="text/javascript"></script>

<script type="text/javascript">

//创建并添加节点。需求:在div_1中添加一个文本节点

//思路:1,创建一个文本节点createTextNode  2,获取div_1节点  3,将文本节点添加到div节点中appendChild

function creatAndAddNode(){

   //1,创建一个文本节点 document createTextNode

   var div1TextNode = document.createTextNode("div_1创建一个文本节点");

   //2,获取div_1节点

   var divNode = document.getElementById("div_1");

   //3,将文本节点添加到div节点中 appendChild

   divNode.appendChild(div1TextNode);

}

function delNode(){

}

function updateNode(){

}

</script>

<style type="text/css">

 div{

   border:#00ccff 1px solid;

   width:200px;

   padding:30px;

   margin:10px;

 }

 #div_1{background-color:#00ccff;}

 #div_2{background-color:#FFccff;}

 #div_3{background-color:#cc00ff;}

 #div_4{background-color:#00FF00;}

</style>

</head>

<body>

<input type="button" value="创建并添加节点" onclick="creatAndAddNode()"/>

<input type="button" value="删除节点" onclick="delNode()"/>

<input type="button" value="修改节点" onclick="updateNode()"/>

  <div id="div_1"></div>

  <div id="div_2">div_2</div>

  <div id="div_3">div_3</div>

  <div id="div_4">div_4</div>

</body>

</html>

效果:

创建添加前:

创建添加后:

17.节点操作——创建并添加2

需求:在div_1中创建并添加一个按钮节点

createTextNode是创建一个文本节点,如果要添加一个按钮或标签,就需要使用createElement

//需求:创建并添加一个按钮节点

function creatAndAddBtnNode(){

   //1,创建一个按钮节点 document createElement

   var div1BtnNode = document.createElement("input");

   div1BtnNode.type = "button";

   div1BtnNode.value = "创建并添加按钮节点";

   //2,获取div_1节点

   var divNode = document.getElementById("div_1");

   //3,将文本节点添加到div节点中 appendChild

   divNode.appendChild(div1BtnNode);

}

<input type="button" value="创建并添加按钮节点" onclick="creatAndAddBtnNode()"/>

 

另一种方式完成添加节点:

其实是使用容器型标签中的属性,innerHTML,这个属性可以设置HTML文本

//需求:创建并添加一个按钮节点2,使用innnerHTML方法

function creatAndAddBtnNode2(){

   //1,获取div_1节点

   var divNode = document.getElementById("div_1");

   //2,设置文本或标签皆可

   //divNode.innerHTML = "创建并添加一个按钮节点2 使用innnerHTML方法";

   divNode.innerHTML = "<input type='text'/>";

}

18.节点操作——删除节点

removeNode(Boolean childrenNode):此方法不建议使用,但是可以用

removeChild():建议使用,删除子节点。获取div_2的父节点,然后通过父节点的removeChild()方法删除该节点

//需求:将div_2节点删除

function delNode(){

   //获取div_2节点

   var div2Node = document.getElementById("div_2");

   //参数表示是否要删除该div的子节点

   div2Node.removeNode(true);

}

<input type="button" value="删除节点" onclick="delNode()"/>

<input type="button" value="修改节点" onclick="updateNode()"/>

  <div id="div_1"></div>

  <div id="div_2">div_2</div>

  <div id="div_3">div_3</div>

<div id="div_4">div_4</div>

结果:false

true:

removeChild():建议使用,删除子节点。获取div_2的父节点,然后通过父节点的removeChild()方法删除该节点

//需求:将div_2节点删除

function delNode(){

   //获取div_2节点

   var div2Node = document.getElementById("div_2");

   //参数表示是否要删除该div的子节点

   //div2Node.removeNode(true);

   //removeChild():建议使用,删除子节点。获取div_2的父节点,然后通过父节点的removeChild()方法删除该节点

   div2Node.parentNode.removeChild(div2Node);

}

19.节点操作——替换&克隆节点

修改节点,即替换掉节点。

replaceNode(newNode):不建议使用

//需求:使用div_3替换掉div_1节点

function updateNode(){

   //获取div_1节点

   var div1Node = document.getElementById("div_1");

   //获取div_3节点

   var div3Node = document.getElementById("div_3");

   //使用replaceNode()方法将div_3替换掉div_1节点

   div1Node.replaceNode(div3Node);

}

结果:

 

replaceChild():利用该节点的父节点,新节点替换掉纠结点

//需求:使用div_3替换掉div_1节点

function updateNode(){

   //获取div_1节点

   var div1Node = document.getElementById("div_1");

   //获取div_3节点

   var div3Node = document.getElementById("div_3");

   //使用replaceNode()方法将div_3替换掉div_1节点

   //div1Node.replaceNode(div3Node);

   div1Node.parentNode.replaceChild(div3Node, div1Node);

}

结果:

需求:实现div_3不改变而,用div_3再修改div_1,即克隆cloneNode()

//需求:实现div_3不改变而,用div_3再修改div_1,即克隆clonNode()

function clonNode(){

   //获取div_1节点

   var div1Node = document.getElementById("div_1");

   //获取div_3节点

   var div3Node = document.getElementById("div_3");

   //cloneNode(boolean):boolean代表是否将其子节点也克隆

   var cloneDiv3 = div3Node.cloneNode(true);

   div1Node.parentNode.replaceChild(cloneDiv3, div1Node);

}

 

<input type="button" value="clon节点" onclick="clonNode()"/>

结果:

firstNode = childNode(0)

lastNode = childNode(length-1)

20示例——新闻字体

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>新闻字体的大中小样式</title>

<script type="text/javascript">

 function changeFontSize(size){

    var newstextDiv = document.getElementById("newstext");

    newstextDiv.style.fontSize = size+"px";

 }

</script>

<style type="text/css">

 a:link a:VISITED {

   color:purple;

}

a:hover{

  color:orange;

}

div{

 width:600px;

}

</style>

</head>

<body>

  <!-- 实现使用超链接实现大中小字体样式的变更

   思路:1,先有新闻数据,并用标签进行封装

   2,定义一些页面样式

   3,确定事件源和时间,以及处理方式中被处理的节点。

   事件源:a标签,事件:onclick

   被处理的节点:div_newstext

   超链接节点本身就有默认的点击事件,需要给超链接加入自定义的事件处理,就要先取消超链接默认的点击效果

   方式一:href="##"

   方式二:启动JShref="javascript:void(0)" 然后再设置onclick事件

   三个a标签使用一个方法,并传入不同的字体参数,通过document.getElementById("id").style再设置其属性即可,对象调用使用fontSize这种形式

  -->

  <h1>这是一个新闻标题</h1>

  <hr>

  <a href="javascript:void(0)" onclick="changeFontSize(18)">大字体</a>

  <a href="javascript:void(0)" onclick="changeFontSize(14)">标准字体</a>

  <a href="javascript:void(0)" onclick="changeFontSize(12)">小字体</a>

  <div id="newstext" style="font-size:12px;">

         这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。

  </div>

</body>

</html>

结果:

大:

中:

小:

21.示例——新闻字体2

需求:除了变化大小,也变化字体的颜色

也document.getElementById("id").style.属性设置

但是如果要改变更多属性时,这样操作就会很烦躁,因此需要进行样式封装。

将多个所需的样式进行封装,一般使用类选择器;

封装到选择器中,只要给指定的标签加载不同的选择器即可;

函数传值时,传入选择器;

设置时,document.getElementById(“id”).className = 选择器名称;即可

样式定义了,如果定义了类选择器,样式没有生效,有可能是id选择器优先级更高,且Style属性优先级最高。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>新闻字体的大中小样式</title>

<script type="text/javascript">

 function changeFontSize(size){

    var newstextDiv = document.getElementById("newstext");

    newstextDiv.style.fontSize = size+"px";

 }

 function changeFont(selector){

    var newstextDiv = document.getElementById("newstext");

    newstextDiv.className = selector;

 }

</script>

<style type="text/css">

 a:link a:VISITED {

   color:purple;

}

a:hover{

  color:orange;

}

div{

 width:600px;

}

.max{

  color:#22FF22;

  background-color:#ee0000;

}

.mid{

  color:#0044ff;

  background-color:#FF5500;

}

.min{

  color:#4433ff;

  background-color:#000000;

}

</style>

</head>

<body>

  <!-- 实现使用超链接实现大中小字体样式的变更

   思路:1,先有新闻数据,并用标签进行封装

   2,定义一些页面样式

   3,确定事件源和时间,以及处理方式中被处理的节点。

   事件源:a标签,事件:onclick

   被处理的节点:div_newstext

   超链接节点本身就有默认的点击事件,需要给超链接加入自定义的事件处理,就要先取消超链接默认的点击效果

   方式一:href="##"

   方式二:启动JShref="javascript:void(0)" 然后再设置onclick事件

   三个a标签使用一个方法,并传入不同的字体参数,通过document.getElementById("id").style.属性 再设置其属性即可,对象调用使用fontSize这种形式

  -->

  <h1>这是一个新闻标题</h1>

  <hr>

  <a href="javascript:void(0)" onclick="changeFontSize(18)">大字体</a>

  <a href="javascript:void(0)" onclick="changeFontSize(14)">标准字体</a>

  <a href="javascript:void(0)" onclick="changeFontSize(12)">小字体</a>

  <br/>

  <h3>class选择器方式变换样式</h3>

  <a href="javascript:void(0)" onclick="changeFont('max')"></a>

  <a href="javascript:void(0)" onclick="changeFont('mid')">标准</a>

  <a href="javascript:void(0)" onclick="changeFont('min')"></a>

  <div id="newstext" style="font-size:12px;" class="mid">

         这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。这是一段新闻,目的是为了设置新闻字体的大中小样式。实现使用超链接实现大中小字体样式的变更。

  </div>

</body>

</html>

大:

标准:

小:

22.示例——展开闭合列表

默认不显示列表里的条目overflow,一点击则显示。

overflow:visible显示,auto自动,hidden隐藏,scroll滚动。用于检索或设置对象的内容超过指定高度或宽度时如何管理内容。

事先指定区域的宽高,超出部分使用overflow进行设置样式

思路:

  1. 标签封装数据,html
  2. 定义样式css
  3. 明确事件源,时间,以及要处理节点,dom
  4. 明确具体的操作方式,其实就是时间的处理内容
  • 将dl属性的overflow的值进行hidden和visible切换(通过标记记录每次点击,然后判断选择来隐藏或者显示)
  • 因此要先获取dl节点
  • 改变该节点的style.overflow属性

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>展开闭合列表</title>

<style type="text/css">

dl dd{

 margin:0px;

}

 dl{

  height:15px;

   overflow:hidden;

 }

</style>

<script type="text/javascript">

   var flag = true;

function expandDT(){

   //获取dt标签

   var dtTag = document.getElementsByTagName("dl")[0];

   if(flag){

     dtTag.style.overflow = "visible";

     flag = false;

   }else{

     dtTag.style.overflow = "hidden";

     flag = true;

   }

}

</script>

</head>

<body>

<!-- 默认不显示列表里的条目overflow,一点击则显示 -->

  <dl>

    <dt onclick="expandDT()" style="font-size:12px;">展开闭合条目</dt>

    <dd>展开闭合条目1</dd>

    <dd>展开闭合条目2</dd>

    <dd>展开闭合条目3</dd>

    <dd>展开闭合条目4</dd>

  </dl>

</body>

</html>

结果:

 

 

23.示例——展开闭合列表2

问题一:写法太繁琐,可以预定义样式已降低JS和CSS的耦合性

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>展开闭合列表</title>

<style type="text/css">

dl dd{

 margin:0px;

}

 /* dl{

   height:15px;

   overflow:hidden;

 } */

 .open{

   height:60px;

   overflow:visible;

 }

 .close{

   height:15px;

   overflow:hidden;

 }

</style>

<script type="text/javascript">

   var flag = true;

function expandDT(){

   //获取dt标签

   var dtTag = document.getElementsByTagName("dl")[0];

   if(flag){

     dtTag.style.overflow = "visible";

     flag = false;

   }else{

     dtTag.style.overflow = "hidden";

     flag = true;

   }

}

function openClose(){

   var dtTag = document.getElementsByTagName("dl")[0];

   if(dtTag.className == "open"){

      dtTag.className = "close";

   }else{

      dtTag.className = "open";

   }

}

</script>

</head>

<body>

<!-- 默认不显示列表里的条目overflow,一点击则显示 -->

  <dl class="close">

    <dt onclick="openClose()">展开闭合条目</dt>

    <dd>展开闭合条目1</dd>

    <dd>展开闭合条目2</dd>

    <dd>展开闭合条目3</dd>

    <dd>展开闭合条目4</dd>

  </dl>

</body>

</html>

结果:

 

 

有多个dl时,可以通过传值方式,区分从而操作多个dl闭合:

<dl class="closeDl">

    <dt onclick="openClose(0)">展开闭合条目一</dt>

    <dd>展开闭合条目1</dd>

    <dd>展开闭合条目2</dd>

    <dd>展开闭合条目3</dd>

    <dd>展开闭合条目4</dd>

  </dl>

  <dl class="closeDl">

    <dt onclick="openClose(1)">展开闭合条目二</dt>

    <dd>展开闭合条目1</dd>

    <dd>展开闭合条目2</dd>

    <dd>展开闭合条目3</dd>

    <dd>展开闭合条目4</dd>

  </dl>

  <dl class="closeDl">

    <dt onclick="openClose(2)">展开闭合条目三</dt>

    <dd>展开闭合条目1</dd>

    <dd>展开闭合条目2</dd>

    <dd>展开闭合条目3</dd>

    <dd>展开闭合条目4</dd>

</dl>

问题:如果传值的index顺序变了,会影响闭合效果的正确性。

解决:传入当前被触发的节点即可(this)

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>展开闭合列表</title>

<style type="text/css">

dl dd{

 margin:0px;

}

dl{

  height:20px;

 }

 /* dl{

   height:15px;

   overflow:hidden;

 } */

 .openDl{

   overflow:visible;

 }

 .closeDl{

   overflow:hidden;

 }

</style>

<script type="text/javascript">

   var flag = true;

function expandDT(){

   //获取dt标签

   var dtTag = document.getElementsByTagName("dl")[0];

   if(flag){

     dtTag.style.overflow = "visible";

     flag = false;

   }else{

     dtTag.style.overflow = "hidden";

     flag = true;

   }

}

function openClose(node){

   //var dtTag = document.getElementsByTagName("dl")[0];

   var nodeDl = node.parentNode;

   if(nodeDl.className == "openDl"){

      nodeDl.className = "closeDl";

   }else{

      nodeDl.className = "openDl";

   }

}

</script>

</head>

<body>

<!-- 默认不显示列表里的条目overflow,一点击则显示 -->

  <dl class="closeDl">

    <dt onclick="openClose(this)">展开闭合条目一</dt>

    <dd>展开闭合条目1</dd>

    <dd>展开闭合条目2</dd>

    <dd>展开闭合条目3</dd>

    <dd>展开闭合条目4</dd>

  </dl>

  <dl class="closeDl">

    <dt onclick="openClose(this)">展开闭合条目二</dt>

    <dd>展开闭合条目1</dd>

    <dd>展开闭合条目2</dd>

    <dd>展开闭合条目3</dd>

    <dd>展开闭合条目4</dd>

  </dl>

  <dl class="closeDl">

    <dt onclick="openClose(this)">展开闭合条目三</dt>

    <dd>展开闭合条目1</dd>

    <dd>展开闭合条目2</dd>

    <dd>展开闭合条目3</dd>

    <dd>展开闭合条目4</dd>

  </dl>

</body>

</html>

结果:

 

24.示例——展开闭合列表3

在多个列表下,一次只展开一个列表,当打开其中一个时,其他的列表闭合

怎么保证只展开一个?

思路:获取所有dl节点getElementsByTagName;遍历这些节点,只对当前的dl进行展开或者闭合操作(parentNode == 遍历到的节点),其他节点都进行闭合操作。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>展开闭合列表</title>

<style type="text/css">

div{

  height:100px;

}

dl dd{

 margin:0px;

}

dl{

  height:20px;

 }

 /* dl{

   height:15px;

   overflow:hidden;

 } */

 .openDl{

   overflow:visible;

 }

 .closeDl{

   overflow:hidden;

 }

</style>

<script type="text/javascript">

//只展开闭合当前节点的条目,其他的都闭合

function openClose1(node){

   //var dtTag = document.getElementsByTagName("dl")[0];

   var nodeDl = node.parentNode;

   //通过nodelength进行遍历当前所有dl节点

   var collNodes = document.getElementsByTagName("dl");

   for (var x = 0; x < collNodes.length; x++) {

      //遍历到的节点为当前节点才进行展开或者闭合

      if(collNodes[x] == nodeDl){

         if(nodeDl.className == "openDl"){

            nodeDl.className = "closeDl";

         }else{

            nodeDl.className = "openDl";

         }

      }else{

         collNodes[x].className = "closeDl";

      }

   }

}

</script>

</head>

<body>

<!-- 默认不显示列表里的条目overflow,一点击则显示 -->

<div>

  <dl class="closeDl">

    <dt onclick="openClose1(this)">展开闭合条目一</dt>

    <dd>展开闭合条目1</dd>

    <dd>展开闭合条目2</dd>

    <dd>展开闭合条目3</dd>

    <dd>展开闭合条目4</dd>

  </dl>

  </div>

  <div>

  <dl class="closeDl">

    <dt onclick="openClose1(this)">展开闭合条目二</dt>

    <dd>展开闭合条目1</dd>

    <dd>展开闭合条目2</dd>

    <dd>展开闭合条目3</dd>

    <dd>展开闭合条目4</dd>

  </dl>

  </div>

  <div>

  <dl class="closeDl">

    <dt onclick="openClose1(this)">展开闭合条目三</dt>

    <dd>展开闭合条目1</dd>

    <dd>展开闭合条目2</dd>

    <dd>展开闭合条目3</dd>

    <dd>展开闭合条目4</dd>

  </dl>

  </div>

</body>

</html>

结果:

25.示例——好友菜单

FireForx和IE6的内核不一样,解析的效果也会不一样

需求:完成一个好友菜单,展开闭合效果

对表格中的ul进行样式定义:取出无序列表的样式;取消ul的内外边距

对表格及单元格的框线进行定义;

设置表格中的超链接样式;

要设置菜单栏和菜单项,a标签有效区域有限,ul标签也是有效的,所以可以对td单元格中的一部分进行封装:先在td里添加背景色,然后再分别设置ul和a标签的的背景色

设置预定义样式:事先隐藏ul内容(按高度隐藏)也可以使用display进行设置

inline行内自动填充,如果一行显示不下另起一行;block另起一行单独作为区块显示。

怎么获取a标签自己对应的ul标签:使用当前a标签的parentNode,然后再通过其拿到ul,要求一次展开一个ul其他的闭合。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>好友菜单</title>

<style type="text/css">

  /* 取消li标签的图标list-style */

  table td li{

    list-style: none;

    background-color: teal;

  }

  table td ul{

    margin:0px;

    padding:0px;

  }

  table td a:link,table td a:VISITED {

   color:blue;

   text-decoration: none;/* 取消a标签下划线 */

  }

  table td a:hover {

   color:red;

  }

  /* 预定义样式,设置展开和闭合的样式display */

  .open{

    display:block;

  }

  .close{

    display:none;

  }

</style>

<script type="text/javascript">

  function list(node){

     //获取当前节点

     var parNode = node.parentNode;//获取到的是td

     var curULNodes = parNode.getElementsByTagName("ul")[0];/* 获取当前的ul节点 */

    

     //获取所有的ul节点

     var tabNode = document.getElementById("menulist");

     var ulsNodes = tabNode.getElementsByTagName("ul");

     for (var x = 0; x < ulsNodes.length; x++) {

      if(ulsNodes[x] == curULNodes){

         if(curULNodes.className == "open"){

            curULNodes.className = "close";

         }else{

            curULNodes.className = "open";

         }

      }else{

         ulsNodes[x].className = "close";

      }

     }

  }

</script>

</head>

<body>

 <table id="menulist">

   <tr>

     <td>

        <a href="javascript:void(0)" onclick="list(this)">好友菜单一</a>

        <ul class="close">

          <li>张一

          <li>张二

          <li>张三

          <li>张四

        </ul>

     </td>

   </tr>

   <tr>

     <td>

        <a href="javascript:void(0)" onclick="list(this)">好友菜单二</a>

        <ul class="close">

          <li>李一

          <li>李二

          <li>李三

          <li>李四

        </ul>

     </td>

   </tr>

   <tr>

     <td>

        <a href="javascript:void(0)" onclick="list(this)">好友菜单三</a>

        <ul class="close">

          <li>王一

          <li>王二

          <li>王三

          <li>王四

        </ul>

     </td>

   </tr>

   <tr>

     <td>

        <a href="javascript:void(0)" onclick="list(this)">好友菜单四</a>

        <ul class="close">

          <li>赵一

          <li>赵二

          <li>赵三

          <li>赵四

        </ul>

     </td>

   </tr>

 </table>

</body>

</html>

结果:

26.示例——创建表格

在页面中创建一个表格,由用户决定创建几行几列的表格

有事件源,比如按钮;必须有一个存储生成的标个节点的位置

思路:可以通过createElement创建元素的形式来实现

1,创建表格节点;2,创建tbody节点;3,创建行节点tr;4,创建单元格节点td;5,让这些节点有关系,指定层次的几点添加append(),appendChild逐级添加;6,获取div节点,并将创建好的表格放进去

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>创建表格一</title>

<style type="text/css">

  table td{

    border:maroon 1px solid;

    width:200px;

  }

</style>

<script type="text/javascript">

 function createTab(){

    //1,创建表格节点;

    var tabNode = document.createElement("table");

    //2,创建tbody节点;

    var tbodyNode = document.createElement("tbody");

    //3,创建行节点tr

    var trNode = document.createElement("tr");

    //4,创建单元格节点td

     var tdNode = document.createElement("td");

     tdNode.innerHTML = "这是一个单元格";

    //5,让这些节点有关系,指定层次的几点添加append()appendChild逐级添加;

    

    trNode.appendChild(tdNode);

    tbodyNode.appendChild(trNode);

    tabNode.appendChild(tbodyNode);

    //6,获取div节点,并将创建好的表格放进去

    document.getElementById("tab").appendChild(tabNode);

 }

</script>

</head>

<body>

  <input type="button" value="创建表格" onclick="createTab()"/>

  <hr>

  <div id="tab"></div>

</body>

</html>

结果:

 

27.示例——创建表格——使用表格对象

无论td tr tbody都是表格里面的东西,所以只要有表格对象即可

insertRow(index)创建行,并将行加入到rows集合中,相当于createElement和appendChild两个方法。index默认-1表示将行插入到行集合的结尾处,其他值表示在指定位置插入行。

行是有单元格组成,于是可以使用行对象tr对象,insertCell()

function createTab2(){

    //1,创建表格节点;

    var tabNode = document.createElement("table");

    //2,通过insertRow创建行

    var trNode = tabNode.insertRow();

    //3,通过insertCell创建列

    var tdNode = trNode.insertCell();

    tdNode.innerHTML = "这是一个单元格";

    //4,将表格节点添加到div

    document.getElementById("tab").appendChild(tabNode);

 }

结果:

function createTab3(){

    //1,创建表格节点;

    var tabNode = document.createElement("table");

    for (var x = 0; x <= 4; x++) {

       //2,通过insertRow创建行

       var trNode = tabNode.insertRow();

      for (var y = 0; y <= 5; y++) {

       //3,通过insertCell创建列

       var tdNode = trNode.insertCell();

       tdNode.innerHTML = (x+1)+"-"+(y+1)+"";

      }

   }

    //4,将表格节点添加到div

    document.getElementById("tab").appendChild(tabNode);

    document.getElementsByName("tab3")[0].disabled = true;

 }

结果:

创建一次表格后,不能再继续创建:button组件中的disabled属性,设置或获取控件的状态,只有true和false。可以在创建表格一次后将该button属性设置为true即可

 

28.示例——创建表格——指定行列

在页面有输入框供用户输入指定的行列:

function createTab4(){

    //1,创建表格节点;

    var tabNode = document.createElement("table");

    //获取用户输入的行和列

    var rowval = document.getElementsByName("rownum")[0].value;

    var cellval = document.getElementsByName("collnum")[0].value;

    for (var x = 0; x < rowval; x++) {

       //2,通过insertRow创建行

       var trNode = tabNode.insertRow();

      for (var y = 0; y < cellval; y++) {

       //3,通过insertCell创建列

       var tdNode = trNode.insertCell();

       tdNode.innerHTML = (x+1)+"-"+(y+1)+"";

      }

   }

    //4,将表格节点添加到div

    document.getElementById("tab").appendChild(tabNode);

    document.getElementsByName("tab4")[0].disabled = true;

 }

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

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

  <br/>

  <input type="button" value="创建表格1" onclick="createTab()"/>

  <input type="button" value="创建表格2" onclick="createTab2()"/>

  <input type="button" name="tab3" value="创建表格3(56)" onclick="createTab3()"/>

  <input type="button" name="tab4" value="创建表格4" onclick="createTab4()"/>

  <hr>

  <div id="tab"></div>

29.示例——删除表格的行和列

deleteRow(rowindex):rowindex表示行号(0开始)

需要判断表格是否存在,所以创建表格是要创建表格的id或者name

动态设置表格id方法:直接调用属性完成,tabNode.id = “tabId”;tabNode.setAttribute(“id”,” tabId”);

function delRow(){

    //判断表格是否存在

    var tabNode = document.getElementById("tabId");

    if(tabNode){

       //获取要删除的行数

        var rownum = document.getElementsByName("deleteRow")[0].value;

       tabNode.deleteRow(rownum-1);

    }else{

       alert("表格不存在");

       return;

    }

 }

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

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

 删除的行:<input type="text" name="deleteRow"/>

  <br/>

  <input type="button" value="创建表格1" onclick="createTab()"/>

  <input type="button" value="创建表格2" onclick="createTab2()"/>

  <input type="button" name="tab3" value="创建表格3(56)" onclick="createTab3()"/>

  <input type="button" name="tab4" value="创建表格4" onclick="createTab4()"/>

  <input type="button" value="删除行" onclick="delRow()"/>

  <hr>

  <div id="tab"></div>

删除列:其实就是删除同一行中的同一位置的单元格

function delColl(){

    //判断表格是否存在

    var tabNode = document.getElementById("tabId");

    if(tabNode){

       //要先获取某行,再删除其列

        var collnum = document.getElementsByName("deleteColl")[0].value;

       //表格中行集合中的列集合的长度要保证存在

       if(collnum >=1 && collnum<=tabNode.rows[0].cells.length){

          for (var x = 0; x < tabNode.rows.length; x++) {

             //获取要删除的行数

             tabNode.rows[x].deleteCell(collnum-1);

          }

       }else{

          alert("要删除的列不存在");

          return;

       }

    }else{

       alert("表格不存在");

       return;

    }

 }

 

<body>

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

  列:<input type="text" name="collnum"/><br/>

 删除的行:<input type="text" name="deleteRow"/><br/>

 删除的列:<input type="text" name="deleteColl"/>

  <br/>

  <input type="button" value="创建表格1" onclick="createTab()"/>

  <input type="button" value="创建表格2" onclick="createTab2()"/>

  <input type="button" name="tab3" value="创建表格3(56)" onclick="createTab3()"/>

  <input type="button" name="tab4" value="创建表格4" onclick="createTab4()"/>

  <input type="button" value="删除行" onclick="delRow()"/>

  <input type="button" value="删除列" onclick="delColl()"/>

  <hr>

  <div id="tab"></div>

</body>

30.示例——行颜色间隔显示并高亮

预定义样式

思路:因为要操作行的样式,所以要先获取表格对象;获取所有被操作的行对象(表格对象.rows);遍历(从第二行开始遍历)行并给每一行指定样式。

问题:JS写在DOM上面,会导致获取表格对象时还没有加载到DOM对象,而读取不到表格对象,因此,可以使用onload方法

高亮光标所在行:事件,onmouseover光标在此之上 onmouseout光标移走后。在光标高亮之前把颜色记录下来,在光标移走后,再还原颜色。

想让所有行都能适用的onmouseover和onmouseout,所以在遍历行时,就给行设置此两个事件。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>行颜色间隔显示并高亮</title>

<style type="text/css">

  table{

     width:400px;

     border:maroon 1px solid;

     border-collapse: collapse;

  }

  table th{

     border:maroon 1px solid;

     background-color: gray;

  }

  table td{

     border:maroon 1px solid;

  }

  /* 预定义奇偶行的样式 */

  /* 奇数 */

  .odd{

    background-color: teal;

  }

  /* 偶数 */

  .even{

    background-color: olive;

  }

  /* 鼠标悬停样式 */

  .over{

    background-color: red;

  }

</style>

<script type="text/javascript">

//记录原始颜色

var oldColor;

function trColor(node){

   //1 因为要操作行的样式,所以要先获取表格对象;

   var tabNode = document.getElementById("tab");

   //2 获取所有被操作的行对象(表格对象.rows);

   var trNodes = tabNode.rows;

   //3 遍历(从第二行开始遍历)行并给每一行指定样式。

   for (var x = 1; x < trNodes.length; x++) {

      //奇数行一种颜色

      if(x%2==1){

         trNodes[x].className = "odd";

      //偶数行另一种颜色

      }else{

         trNodes[x].className = "even";

      }

      trNodes[x].onmouseover = function(){

         name = this.className;

         this.className = "over";

      }

      trNodes[x].onmouseout = function(){

         this.className = name;

      }

   }

  

}

//JS写在DOM上面,会导致获取表格对象时还没有加载到DOM对象,而读取不到表格对象,因此,可以使用onload方法

onload = function(){

   trColor();

}

</script>

</head>

<body>

  <table id="tab">

    <tr>

      <th>姓名</th>

      <th>年龄</th>

      <th>籍贯</th>

    </tr>

    <tr>

      <td>张三</td>

      <td>25</td>

      <td>湖北</td>

    </tr>

    <tr>

      <td>李四</td>

      <td>27</td>

      <td>湖南</td>

    </tr>

    <tr>

      <td>王五</td>

      <td>24</td>

      <td>广东</td>

    </tr>

    <tr>

      <td>赵六</td>

      <td>26</td>

      <td>福建</td>

    </tr>

    <tr>

      <td>孙琦</td>

      <td>26</td>

      <td>安徽</td>

    </tr>

  </table>

</body>

</html>

结果:

31.示例——表格排序

需求:对年龄进行排序。年龄可点击:按钮或者a标签。

思路:1,排序就需要数组,获取需要参与排序的行对象数组;2,对行数组中的每一行的年龄单元格的数据进行比较,并完成行对象在数组中的位置置换;3,将排好序的数组重新添加回表格。

需要定义一个临时容器,临时容器存储的是数据的地址,用于存储需要排序的航对象

获取每个单元格的值:容器[x].cells[1].innerHTML

换位置:换位置的是行,而不是列

排完序后重新添加回表格,临时容器[x].parentNode.appendChild(临时容器[x]);

可以多次切换:使用flag记录切换标记,每次切换后,将其更改

临时容器存储的是数据的地址,排完序后,再将其地址添加到对应的位置

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>表格排序</title>

<style type="text/css">

  table{

     width:400px;

     border:maroon 1px solid;

     border-collapse: collapse;

  }

  table th{

     border:maroon 1px solid;

     background-color: gray;

  }

  table td{

     border:maroon 1px solid;

  }

  a{

    text-decoration: none;

  }

  a:hover{

    color:yellow;

  }

  a:link a:VISITED {

   color:blue;

  }

 

</style>

<script type="text/javascript">

//使用标记记录每次排序的标识,实现升序降序切换

var flag = true;

function sortAge(){

   //1需要定义一个临时容器,临时容器存储的是数据的地址,用于存储需要排序的航对象

   var ageArr = [];

   var tabNode = document.getElementById("tab");

   //2获取每个单元格的值:容器[x].cells[1].innerHTML

   var trNodes = tabNode.getElementsByTagName("tr");

   for (var x = 1; x < trNodes.length; x++) {

      ageArr[x-1] = trNodes[x];

   }

   //对容器里的数值进行排序

   //3换位置:换位置的是行,而不是列

   mySort(ageArr);

   //trNodes.parentNode.appendChild(ageArr);

   //4排完序后重新添加回表格,临时容器[x].parentNode.appendChild(临时容器[x]);

   if(flag){

      for (var x = 0; x < ageArr.length; x++) {

         alert(ageArr[x].cells[1].innerHTML);

         //这里一定要使用临时容器的父节点

         ageArr[x].parentNode.appendChild(ageArr[x]);

      }

      flag = false;

   }else{

      for (var x = ageArr.length-1; x >= 0; x--) {

         alert(ageArr[x].cells[1].innerHTML);

         //这里一定要使用临时容器的父节点

         ageArr[x].parentNode.appendChild(ageArr[x]);

      }

      flag = true;

   }

}

function mySort(ageArr){

   for (var x = 0; x < ageArr.length-1; x++) {

      for (var y = x+1; y < ageArr.length; y++) {

         if(parseInt(ageArr[x].cells[1].innerHTML) > parseInt(ageArr[y].cells[1].innerHTML)){

            var temp = ageArr[x];

            ageArr[x] = ageArr[y];

            ageArr[y] = temp;

         }

      }

   }

}

</script>

</head>

<body>

  <table id="tab">

    <tr>

      <th>姓名</th>

      <th><a href="javascript:void(0)" onclick="sortAge()">年龄</a></th>

      <th>籍贯</th>

    </tr>

    <tr>

      <td>张三</td>

      <td>25</td>

      <td>湖北</td>

    </tr>

    <tr>

      <td>李四</td>

      <td>27</td>

      <td>湖南</td>

    </tr>

    <tr>

      <td>王五</td>

      <td>24</td>

      <td>广东</td>

    </tr>

    <tr>

      <td>赵六</td>

      <td>28</td>

      <td>福建</td>

    </tr>

    <tr>

      <td>孙琦</td>

      <td>26</td>

      <td>安徽</td>

    </tr>

  </table>

</body>

</html>

结果:

32.示例——全选商品列表

思路:获取所有的名称为item的复选框,判断checked的状态,为true的表示被选中,获取该节点的value进行累加。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>商品全选</title>

<script type="text/javascript">

  function getSum(){

     var sum = 0;

     var itemsNode = document.getElementsByName("item");

     for (var x = 0; x < itemsNode.length; x++) {

      if(itemsNode[x].checked){

         sum+= parseInt(itemsNode[x].value);

      }

     }

     document.getElementById("sumId").innerHTML = sum;

  }

  function checkAll(node){

     var itemsNode = document.getElementsByName("item");

     for (var x = 0; x < itemsNode.length; x++) {

        //全选的box的状态赋值为所有的itembox的状态

      itemsNode[x].checked = node.checked;

     }

  }

</script>

</head>

<body>

 <input type="checkbox" name="checklist" onclick="checkAll(this)"/>全选<br/>

 <input type="checkbox" name="item" value="4000"/>笔记本电脑:4000<br/>

 <input type="checkbox" name="item" value="4000"/>笔记本电脑:4000<br/>

 <input type="checkbox" name="item" value="4000"/>笔记本电脑:4000<br/>

 <input type="checkbox" name="item" value="4000"/>笔记本电脑:4000<br/>

 <input type="checkbox" name="item" value="4000"/>笔记本电脑:4000<br/>

 <input type="checkbox" name="item" value="4000"/>笔记本电脑:4000<br/>

 <input type="button" value="总金额是" onclick="getSum()"/><span id="sumId"></span>

 

</body>

</html>

结果:

33.示例——邮件列表

CSS样式设置、行颜色间隔显示:

步骤:1,获取表格对象;2,获取行对象表对象.rows;3,对所有需要设置背景的行对象进行遍历;

全选:把全选复选框的状态赋值给其他所有复选框的状态

全选按钮:全选按钮、反选按钮(原来复选框的真假赋值为假真即非)、全选复选框三个功能都是一样的,在一个方法实现。通过传值方式解决:可以字符串、数字(0,1,2)等区别都可以。

删除所选邮件:获取所有mail节点;删除某一行(每个节点间都存在所属关系,可以按照层次关系拿,复选框是当前节点,复选框节点的父级为td,而td的父级就是tr节点);然后trNode.parentNode.removeChild(trNode);即可。

在进行删除操作时,每次删除点前一个角标位的数据时,后一个角标位的数据会前移,但循环x++时,再次循环到下一条数据时,就会有一条前移的数据无法删除,所以使用x--回到前一个角标位进行操作。

只要remove就会改变长度,行长度在减少,但是循环的x在递增。即remove后,数据角标前移,但是x却在递增;让x—即可(也可以不做x—也不做删除,而是使用行记住所有要删除的标记,然后再遍历临时容器进行删除);删完后还是需要颜色间隔显示,再调用一次颜色间隔显示的方法。

删除前进行删除确认:if(confirm(“确认删除?”))

注意:复选框中所有的复选框都要名字相同

mail.css:

table{

   width:500px;

   border:red 1px solid;

   border-collapse: collapse;

}

table th{

     border:maroon 1px solid;

     background-color: gray;

  }

table td{

   border:maroon 1px solid;

}

 

/* 预定义奇偶行的样式 */

  /* 奇数 */

  .odd{

    background-color: teal;

  }

  /* 偶数 */

  .even{

    background-color: olive;

  }

  /* 鼠标悬停样式 */

  .over{

    background-color: red;

  }

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>邮件附件</title>

<style type="text/css">

  @IMPORT url("mail.css");

</style>

<script type="text/javascript">

  var oldColor;

  function trColor(){

     //获取表格对象

     var tabNode = document.getElementById("mail");

     //通过表格对象获取所有行

     var trNums = tabNode.rows;

     //循环所有的行,将奇数行和偶数行分开设置不同颜色

     for (var x = 1; x < trNums.length-1; x++) {

      if(x%2==1){

         trNums[x].className = "odd";

      }else{

         trNums[x].className = "even";

      }

      trNums[x].onmouseover = function(){

         //在鼠标悬浮时记录之前的样式

          oldColor = this.className;

         this.className = "over";

      }

      trNums[x].onmouseout = function(){

         this.className = oldColor;

      }

     }

  }

  onload = function(){

     trColor();

  }

  //获取所有复选框的节点,使用当前节点的选中状态赋值给其他所有的复选框

  function checkAll(node){

     //获取所有复选框的节点

     var checkboxNodes = document.getElementsByName("mails");

    //循环所有的行,将奇数行和偶数行分开设置不同颜色

     for (var x = 0; x < checkboxNodes.length; x++) {

        checkboxNodes[x].checked = node.checked;

     }

  }

  //使用标记区分:全选(1)、反选(-1)、取消全选(0

  //循环所有的复选节点,然后按条件操作

  function checkMail(num){

   //获取所有复选框的节点

        var checkboxNodes = document.getElementsByName("mails");

       //除了第一行和最后一行,循环所有的行,将奇数行和偶数行分开设置不同颜色

        for (var x = 1; x < checkboxNodes.length-1; x++) {

           if(num>0){

             checkboxNodes[x].checked = true;

           }else if(num<0){

              checkboxNodes[x].checked = !checkboxNodes[x].checked;

           }else{

              checkboxNodes[x].checked = false;

           }

        }

  }

 

  function delMail(){

     var checkboxNodes = document.getElementsByName("mails");

    //除了第一行和最后一行,循环所有的行,将奇数行和偶数行分开设置不同颜色

     for (var x = 1; x < checkboxNodes.length-1; x++) {

        if(checkboxNodes[x].checked){

           var trNode = checkboxNodes[x].parentNode.parentNode;

           trNode.parentNode.removeChild(trNode);

           //在进行删除操作时,每次删除点前一个角标位的数据时,后一个角标位的数据会前移,但循环x++时,再次循环到下一条数据时,就会有一条前移的数据无法删除,所以使用x--回到前一个角标位进行操作

           x--;

        }

     }

    trColor();

  }

</script>

</head>

<body>

 <table id="mail">

   <tr>

     <th><input type="checkbox" onclick="checkAll(this)" name="mails"/>全选</th>

     <th>发件人</th>

     <th>邮件名称</th>

     <th>附件</th>

   </tr>

   <tr>

     <td><input type="checkbox" name="mails"/></td>

     <td>张三1</td>

     <td>邮件名称1</td>

     <td>附件1</td>

   </tr>

   <tr>

     <td><input type="checkbox" name="mails"/></td>

     <td>张三2</td>

     <td>邮件名称2</td>

     <td>附件2</td>

   </tr>

   <tr>

     <td><input type="checkbox" name="mails"/></td>

     <td>张三3</td>

     <td>邮件名称3</td>

     <td>附件3</td>

   </tr>

   <tr>

     <td><input type="checkbox" name="mails"/></td>

     <td>张三4</td>

     <td>邮件名称4</td>

     <td>附件4</td>

   </tr>

   <tr>

     <td><input type="checkbox" name="mails"/></td>

     <td>张三5</td>

     <td>邮件名称5</td>

     <td>附件5</td>

   </tr>

   <tr>

     <td><input type="checkbox" name="mails"/></td>

     <td>张三6</td>

     <td>邮件名称6</td>

     <td>附件6</td>

   </tr>

   <tr>

     <td><input type="checkbox" onclick="checkAll(this)" name="mails"/>全选</td>

     <td colspan="3" align="center">

       <input type="button" value="全选" onclick="checkMail(1)"/>

       <input type="button" value="取消全选" onclick="checkMail(0)"/>

       <input type="button" value="反选" onclick="checkMail(-1)"/>

       <input type="button" value="删除所选行" onclick="delMail()"/>

     </td>

   </tr>

 </table>

</body>

</html>

结果:

34.示例——调查问卷

单选按钮演示:1,是否参与问卷调查?2,性格测试

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>调查问卷</title>

<style type="text/css">

 #content{

   display:none;

 }

</style>

<script type="text/javascript">

 function checkRadio(node){

    var radioNode = node.value;

    var contentNode = document.getElementById("content");

    if(radioNode == "yes"){

       contentNode.style.display = "block";

    }else{

       contentNode.style.display = "none";

    }

 }

</script>

</head>

<body>

请问您是否接受以下问卷调查:

<input type="radio" name="ask" value="yes" onclick="checkRadio(this)"/>

<input type="radio" name="ask" value="no" checked="checked" onclick="checkRadio(this)"/>

<div id="content">

  调查问卷内容:<br/>

  您的姓名:<input type="text"/><br/>

  您的年龄:<input type="text"/>

</div>

</body>

</html>

结果:

35.示例——性格测试

步骤:1,判断radio中是否有答案被选中:获取所有的radio,并遍历判断checked的状态,用flag记录是否被选中

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>性格测试</title>

<style type="text/css">

 #ullist{

   list-style: none;

   margin:8px;

   padding:4px;

 }

 .close{

   display:none;

 }

</style>

<script type="text/javascript">

function getResult(){

   var val;

   var flag = false;

   //获取所有单选按钮

   var radioNode = document.getElementsByName("fruit");

   for (var x = 0; x < radioNode.length; x++) {

      //遍历判断checked的状态

      if(radioNode[x].checked){

         val = radioNode[x].value;

         flag = true;

         break;

      }

   }

   //flag记录是否被选中,如果被选中记录分数并显示相应div,没有被选中则提示未选中单选按钮

   if(flag){

      //判断值的范围

      if(val<=3){

         document.getElementById("less").style.display = "block";

         document.getElementById("more").style.display = "none";

      }else{

         document.getElementById("less").style.display = "none";

         document.getElementById("more").style.display = "block";

      }

   }else{

      document.write("请选择一种水果")

   }

}

</script>

</head>

<body>

<h2>欢迎您参与性格测试:</h2>

 <div>

   <h3>第一题:</h3>

         您喜欢的水果是什么?

   <ul id="ullist">

    <li><input type="radio" name="fruit" value="1"/>苹果

    <li><input type="radio" name="fruit" value="2"/>葡萄

    <li><input type="radio" name="fruit" value="3"/>芒果

    <li><input type="radio" name="fruit" value="4"/>樱桃

    <li><input type="radio" name="fruit" value="5"/>橘子

   </ul>

 </div>

 <input type="button" value="查看测试结果" onclick="getResult()"/>

 <div id="less" class="close">1-3分:你的性格内向并扭曲,建议咨询心理医生</div>

 <div id="more" class="close">4-6分:你的性格外向活泼,交往正常</div>

</body>

</html>

结果:

36.示例——下拉菜单——选择颜色

想拿到被选中的option时利用select对象拿到所有的options

获取所有的options;循环遍历所有的options;通过selectedIndex设置或获取选中选项的索引或位置

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>下拉菜单——选择颜色</title>

<style type="text/css">

  #div1{

     width:100px;

     height:100px;

      position:relative;

      float:left;

  }

  #div2{

      width:100px;

     height:100px;

      position:relative;

      float:left;

  }

  #div3{

      width:100px;

     height:100px;

     position:relative;

      float:left;

  }

  #text{

      padding:10px;

      width:300px;

     position:relative;

      clear:left;

  }

</style>

<script type="text/javascript">

  function changeColor(node){

     //注意通过node.style.backgroundColor获取属性值时,必须是在DOM节点中,相应标签里有style属性,如果是写在css中的样式属性时获取不了的

   var divColor = node.style.backgroundColor;

    document.getElementById("text").style.color = divColor;

  }

 

  function changeSelColor(val){

     document.getElementById("text").style.color = val;

  }

</script>

</head>

<body>

  <div id="div1" style="background-color: red;" onclick="changeColor(this)"></div>

  <div id="div2" style="background-color: green;" onclick="changeColor(this)"></div>

  <div id="div3" style="background-color: blue;" onclick="changeColor(this)"></div>

  <div id="text">

             颜色检测区域,选择什么颜色的div,则文字变成什么颜色

  </div>

  <hr>

  <select id="colorSel" onchange="changeSelColor(this.value)">

    <option>请选择颜色</option>

    <option style="background-color: red;" value="red">红色</option>

    <option style="background-color: green;" value="green">绿色</option>

    <option style="background-color: blue;" value="blue">蓝色</option>

  </select>

</body>

</html>

结果:可以通过点击div区域或者下拉框调整字体的颜色

 

 

37.示例——下拉菜单——级联选择省市

方式一:使用二维数组的形式存储各个城市

方式二:通过option中的value值去对应设置json格式数据

步骤:

1,获取两个下拉菜单对象;2,获取到底选择的哪个省;3,通过角标到容器去获取对应城市数组;4,遍历这个数组,并将这个数组的元素封装成option对象createElement(“option”)创建optionDOM节点,添加到子菜单中

subNode.appendChild(optNode);5,每次添加前,要将子菜单中的内容清空:遍历子菜单然后再removeChild(),删除时角标在递增,数据在往后,始终有数据没被删完,可以x++不使用,也可以在循环里写X--;清除第二种方法:直接让子菜单的length为0subSelNode.length=0

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>级联选择城市</title>

<style type="text/css">

  select{

    width:100px;

  }

 

</style>

<script type="text/javascript">

  function changeProvice(){

     //声明省份和城市的关系

     var provinceArr = [['请选择城市'],['深圳','韶关','清远','佛山'],['武汉','恩施','宜昌','襄樊'],['万州','石柱','黔江','沙市'],['温州','绍兴','丽水','义乌']];

     //1,获取两个下拉菜单对象;

     var provinceSelNode = document.getElementById("province");

     var citySelNode = document.getElementById("city");

     //2,获取到底选择的哪个省;

     var provinceIndex = provinceSelNode.selectedIndex;

     //3,通过角标到容器去获取对应城市数组;

     var citiesArr = provinceArr[provinceIndex];

     //4,每次添加前,要将子菜单中的内容清空:遍历子菜单然后再removeChild(),删除时角标在递增,数据在往后,始终有数据没被删完,可以x++不使用,也可以在循环里写X--;清除第二种方法:直接让子菜单的length0subSelNode.length=0

     citySelNode.length = 0;

     //5,遍历这个数组,并将这个数组的元素封装成option对象createElement(“option”)创建option DOM节点,添加到子菜单中subNode.appendChild(optNode)

     for (var x = 0; x < citiesArr.length; x++) {

      var optionNode = document.createElement("option");

      optionNode.innerHTML = citiesArr[x];

      citySelNode.appendChild(optionNode);

     }

 

  }

</script>

</head>

<body>

  <select id="province" onchange="changeProvice()">

    <option>请选择省份</option>

    <option>广东</option>

    <option>湖北</option>

    <option>重庆</option>

    <option>浙江</option>

  </select>

  <select id="city">

    <option>请选择城市</option>

  </select>

</body>

</html>

结果:

38.示例——添加删除附件

需求:动态添加或删除某些附件。

添加附件时:因为文件选取框定义在行对象中,所以只要给表格创建新的行和单元格即可insertRow() insertCell()。

删除:删除当前所在的行即可。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>动态添加或删除附件</title>

<style type="text/css">

  a:link,a:visited{

    color:blue;

    text-decoration: none;

  }

  a:hover{

    color:purple;

    text-decoration: none;

  }

</style>

<script type="text/javascript">

 function addFile(){

    var tabNode = document.getElementById("tabId");

    //table里添加trtr里添加td

    var trNode = tabNode.insertRow();

    var tdNode_text = trNode.insertCell();

    var tdNode_del = trNode.insertCell();

    tdNode_text.innerHTML = "<input type='file'/>";

    tdNode_del.innerHTML = "<a href='javascript:void(0)' οnclick='delFile(this)'>删除附件</a>";

 }

 

 function delFile(node){

    //获取父级节点,在通过父级节点删除本节点

    var trNode = node.parentNode.parentNode;

    trNode.parentNode.removeChild(trNode);

 }

</script>

</head>

<body>

  <table id="tabId">

    <tr>

      <td><a href="javascript:void(0)" onclick="addFile()">添加附件</a></td>

    </tr>

  </table>

</body>

</html>

结果:

39.示例——表单校验——涉及的时间和信息提示方式

用户输入信息后,在发送到服务端之前进行校验,校验非法则不发送数据到服务端

光标焦点失去时:onblur

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>表单校验</title>

<script type="text/javascript">

  function checkUser(){

     var username = document.getElementById("username");

     var userspan = document.getElementById("userspan");

     if(username.value == "lisi"){

        userspan.innerHTML = "用户名正确".fontcolor("green");

     }else{

        userspan.innerHTML = "用户名错误".fontcolor("red");

     }

    

  }

</script>

</head>

<body>

 <form>

   用户名:<input type="text" id="username" onblur="checkUser()"/><span id="userspan"></span><br/>

   密码:<input type="password"/>

 </form>

</body>

</html>

结果:

40.示例——表单校验——涉及的正则校验

正确信息和错误信息以及要求先写好,然后根据校验的结果来显示不同信息

正则基本和java正则差不多

需求:name四个字母,并且忽略大小写

re = new RegExp(“pattern”,”flag”);pattern为正则表达式,flag为标记全文查找出现的所有pattern,i忽略大小写,m多行查找

JS中的match方法不是返回真假值,而是将查到的匹配的结果放到数组中并返回

JS中test方法返回布尔值,找出被查找的字符串中是是否存在某值。

正则中如果使用”/正则内容/”,则\等特殊符号不需要转义了。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>表单校验</title>

<script type="text/javascript">

  function checkUser2(){

     var username = document.getElementById("username");

     var userspan = document.getElementById("userspan");

     var regex = new RegExp("^[a-z]{4}$","i");//^开始标志$结束标志,i表示忽略大小写

     if(regex.test(username.value)){

        userspan.innerHTML = "用户名正确".fontcolor("green");

     }else{

        userspan.innerHTML = "用户名错误".fontcolor("red");

     }

    

  }

</script>

</head>

<body>

 <form>

   用户名:<input type="text" id="username" onblur="checkUser2()"/><span id="userspan"></span><br/>

   密码:<input type="password"/>

 </form>

</body>

</html>

结果:

41.示例——表单校验——表单提交的两种方式

用户名正确才提交,非法则不提交。要根据数据是否合法再决定提交按钮。

对于submit按钮,会默认将form表单中的数据打成包进行提交。因此需要在form里加上方式一:onsubmit事件,重写表单默认的提交事件处理。

onsubmit="return checkForm()"onsubmit事件里面要对checkForm方法进行布尔值的返回,如果为真才会真正提交。

方式二:自定义提交按钮或者其他组件,然后再方法中直接调用submit()方法

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>表单校验</title>

<script type="text/javascript">

  function checkUser2(){

     var flag = false;

     var username = document.getElementById("username");

     var userspan = document.getElementById("userspan");

     var regex = new RegExp("^[a-z]{4}$","i");//^开始标志$结束标志,i表示忽略大小写

     if(regex.test(username.value)){

        userspan.innerHTML = "用户名正确".fontcolor("green");

        flag = true;

     }else{

        userspan.innerHTML = "用户名错误".fontcolor("red");

        flag = false;

     }

     return flag;

  }

  function checkForm(){

     if(checkUser2()){

        return true;

     }else{

         return false;

     }

  }

  function mysubmit(){

     var userForm = document.getElementById("userForm");

     userForm.submit();

  }

</script>

</head>

<body>

 <form id="userForm" onsubmit="return checkForm()">

   用户名:<input type="text" id="username" onblur="checkUser2()"/><span id="userspan"></span><br/>

   密码:<input type="password"/><br/>

   <input type="submit" value="提交"/>

 </form>

 <input type="button" value="自定义提交" onclick="mysubmit()"/>

</body>

</html>

结果:

42.示例——表单校验——涉及的正则校验

更多的校验。如果有很多表单元素,要拿到很多的表单的值,要写正则等,且获取方法基本一致,所以就进行了方法截取。

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>表单校验</title>

<script type="text/javascript">

   function checkForm(id,regex,spanId,okInfo,errInfo){

       var flag = false;

        var val = document.getElementById(id).value;

        var userspan = document.getElementById(spanId);

        if(regex.test(val)){

           userspan.innerHTML = okInfo.fontcolor("green");

           flag = true;

        }else{

           userspan.innerHTML = errInfo.fontcolor("red");

           flag = false;

        }

        return flag;

   }

  function checkUser(){

     var regex = /^[a-z]{4}$/;

    return checkForm("username",regex,"userspan","用户名正确","用户名错误");  

  }

  function checkPwd(){

     var regex = /^\d{6,8}$/;

    return checkForm("pwd",regex,"pwdspan","密码正确","密码错误");   

  }

  function checkRePwd(){

     var pwd = document.getElementById("pwd").value;

     var repwd = document.getElementById("repwd").value;

     var repwdspan = document.getElementById("repwdspan");

     if(pwd == repwd){

        repwdspan.innerHTML = "密码一致".fontcolor("green");

        return true;

     }else{

        repwdspan.innerHTML = "密码不一致".fontcolor("red");

        return false;

     }

  }

  function checkMail(){

     var regex = /^\w+@\w+(\.\w+)+$/;

    return checkForm("mail",regex,"mailspan","邮件正确","邮件错误");    

  }

  function submitForm(){

     if(checkUser()&&checkPwd()&&checkRePwd()&&checkMail()){

        return true;

     }else{

         return false;

     }

  }

  function mysubmit(){

     var userForm = document.getElementById("userForm");

     userForm.submit();

  }

</script>

</head>

<body>

 <form id="userForm" onsubmit="return submitForm()">

   用户名:<input type="text" id="username" onblur="checkUser()"/><span id="userspan"></span><br/>

   密码:<input type="password" id="pwd" onblur="checkPwd()"/><span id="pwdspan"></span><br/>

   确认 密码:<input type="password" id="repwd" onblur="checkRePwd()"/><span id="repwdspan"></span><br/>

   邮件:<input type="text" id="mail" onblur="checkMail()"/><span id="mailspan"></span><br/>

   <input type="submit" value="提交"/>

 </form>

 <input type="button" value="自定义提交" onclick="mysubmit()"/>

</body>

</html>

结果:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值