在网页中,表格和表单都是非常关键的应用,表格用来存放数据并布局页面样式,表单用于传输数据、采集客户端信息等。
6.1 用CSS定制表格样式
使用 CSS 来设置表格样式可以极大地改善表格外观,如可以用 CSS 来设置表格的颜色、边框等。
6.1.1 表格的相关标签
- 表格具有3 个最基本的HTML 标签,分别是<table> 标签、<tr> 标签和<td> 标签。
- <table> 标签用于定 义整个表格
- border属性:用于为每个单元格应用边框,并用边框围绕表格,如果border属性的值发生改变,那么只有表格周围边框的尺寸会发生改变,表格内部的边框尺寸不变。设置border="0",可以显示没有边框的表格。
- summary属性:用于设置表格内容的摘要,该属性不会对普通浏览器产生任何视觉变化,即在浏览页面时不可见,但该属性的内容对搜索引擎非常重要。
- <tr> 定义一行
- <td> 定义一个单元格
- <table> 标签用于定 义整个表格
- 此外还有两个标签应用比较广泛,分别是<caption> 标签和 <th> 标签。<caption> 标签用来设置表格标题;<th> 标签用来设置表头,加粗并居中显示。
6.1.2 设置表格的颜色
表格颜色的设置十分简单,与文字颜色的设置完全一样,通过color 属性设置表格中文字的颜色,通过 background-color 属性设置表格的背景颜色,通过 bordercolor 属性设置表格的边框颜色等。
6.1.3 设置表格的边框
- 根据不同的需求,可以对表格或单元格应用不同的边框,使用CSS中的边框属性可以指定边框的大小、样式和颜色等。该属性包括 border-width、border-style、border-color。
border:2px solid red
border-width:2px;
border-style:solid; /*边框样式还包括:dashed,dotted,double,groove,ridge,inset,outset*/
border-color:red;
先设置border-style,再设置border-color
- 设置表格边框属性时,除了将表格作为一个整体进行定义,也可以将表格边框的4个部分分别进行定义,具体代码如下:
border-top:2px solid red;
border-bottom:2px solid red;
border-right:2px solid red;
border-left:2px solid red;
<!DOCTYPE html>
<html>
<head>
<title>设置表格边框</title>
<style type="text/css">
table{
color:#000066;
background-color:#999999;
font-family:"宋体";
border-collapse: separate; /*表格边框分开不合并*/
border-spacing: 5pt; /*相邻单元格边框的间距*/
border-top: 5px solid red; /*表格的上边框*/
border-left: 5px solid red; /*表格的左边框*/
border-right: 5px dashed black; /*表格的右边框*/
border-bottom: 5px dashed blue; /*表格的下边框*/
}
th{
color:#000033;
background-color:#9900CC;
border: solid 5pt; /*表头边框*/
}
caption{
font-size:16px; /* 表格标题字体大小 */
font-weight:bolder; /* 表格标题字体粗细 */
}
</style>
</head>
<body onload="insTable()">
<table width="200" border="1" summary="该表格显示了学生的语文数学成绩" id="score">
<caption>
成绩表
</caption>
<th>姓名</th>
<th>语文</th>
<th>数学</th>
<tr>
<td>张三</td>
<td>88</td>
<td>90</td>
</tr>
<tr>
<td>李四</td>
<td>65</td>
<td>82</td>
</tr>
<tr>
<td>王五</td>
<td>95</td>
<td>78</td>
</tr>
</table>
</body>
</html>
6.2 用DOM控制表格
DOM 的全称是Document Object Model,即文档对象模型,它是网站内容与JavaScript 互通的接口。在 DOM 中,所有的HTML 元素、属性和文本都被看成对象,DOM 提供了访问所有这些对象的方法和属性, 并可以通过创建、添加、修改和删除页面上的任意元素来重新构建页面。
6.2.1 动态添加表格
1. appendChild() 方法
var trNode = document.createElement("tr");
var tdNode = document.createElement("td");
var textNode = document.createTextNode("新添加的行");
tdNode.appendChild(textNode);
trNode.appendChild(tdNode);
document.getElementById('score').appendChild(trNode);
上面的代码,用户先创建了一个tr节点、td节点和一个文本节点,然后将文本节点追加在td节点后,再将td节点追加在tr节点后,最后将tr节点追加在需要添加新行的表格后。
2. insertRow() 方法和 insertCell() 方法
- insertRow() 方法用于在表格中的指定位置插入一个新行。返回一个 TableRow,表示新插入的行。index从0开始,新行将被插入 index 所在行之前。
tableObject.insertRow(index)
- insertCell() 方法用于在 HTML 表的一行的指定位置插入一个空的 <td> 元素。返回一个 TableCell 对象,表示新创建并被插入的 <td> 元素。请注意,该方法只能插入 <td> 数据表元。若需要给行添加头表元,必须用 Document.createElement() 方法和 Node.insertBefore() 方法(或相关的方法)创建并插入一个 <th> 元素。
tablerowObject.insertCell(index)
<script type="text/javascript"; language="javascript">
function insTable()
{
/*在ID为score的表的最后新添加一行*/
var objRow=document.getElementById("score").insertRow(4);
/*创建一个数组用来存放单元格的内容*/
var content=new Array();
content[0]=document.createTextNode("赵六");
content[1]=document.createTextNode("55");
content[2]=document.createTextNode("67");
/*为新添加的一行添加单元格并填充内容*/
for(var i=0;i< content.length;i++)
{
var objCell=objRow.insertCell(i);
objCell.appendChild(content[i]);
}
}
</script>
6.2.2 修改单元格内容
- innerHTML属性:用于设置或者获取从对象的起始位置到终止位置的全部内容,包括HTML标签。
- innerText属性:用于设置或者获取从对象的起始位置到终止位置的文本,不包括HTML标签。
- 在 JavaScript 中,要想修改单元格的内容,可以通过设置该单元格的 ID 或者 Name 属性来获取对要修改单元格的引用句柄,从而修改单元格内容。
var oTable=document.getElementById("member");
oTable.rows[3].cells[4].innerHTML="丢失"; //表的第三行,第四列
6.2.3 动态删除表格
- 方法一:确定所要删除的行号,直接删除
objTable.deledeRow(2);
- 方法二:不确定所要删除行的索引号,先根据所要删除行的ID找到其索引号再删除
var objRow=document.getElementById("tr3");
var Index=objRow.rowIndex;
objTable.deleteRow(index);
- 方法三:给表格每一行添加一列超链接,使用户单击要删除的那一行的超链接就可以删除该行
<script language="javascript">
function myDelete(){
var oTable = document.getElementById("member");
//删除该行
this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode);
}
//window.onload()方法用于在网页加载完毕后立刻执行的操作,即当 HTML 文档加载完毕后,立刻执行某个方法。
window.onload=function(){
var oTable = document.getElementById("member");
var oTd;
//动态添加delete链接
for(var i=1;i<oTable.rows.length;i++){
oTd = oTable.rows[i].insertCell(5);
oTd.innerHTML = "<a href='#'>delete</a>";
oTd.firstChild.onclick = myDelete; //添加删除事件
}
}
</script>
方法四:自定义一个删除列的方法
<script language="javascript">
function deleteColumn(oTable,iNum){
//自定义删除列函数,即每行删除相应单元格
for(var i=0;i<oTable.rows.length;i++)
oTable.rows[i].deleteCell(iNum);
}
function aa(){
var oTable = document.getElementById("member");
deleteColumn(oTable,3);
}
</script>
6.3 控制表单
表单是网页与用户交互的桥梁,可以收集用户的信息和反馈意见,常常用于实现用户注册、登录、投票 等功能。
6.3.1 理解表单的相关标签与表单元素
- 表单由窗体和控件组成,一个表单一般应该包含用户填写信息的输入框、提交按钮等,这些输入框或按钮叫作控件。表单很像容器,它能够容纳各种各样的控件。
- 一个表单用<form></form> 标签来创建,即定义表单的开始和结束位置,在开始和结束标签之间的一切定义都属于表单的内容。<form> 标签具有很多属性。
- id:用于返回表单对象id。可以通过id属性的值对表单进行引用。
- name:用于返回表单对象的名称。可以通过name属性的值对表单进行引用。
- method:用于说明表单的提交方法。可取值get()或post(),其中get()为默认方法。
- action:用来定义表达处理程序的位置(相对地址或绝对地址)
- target:用于说明在何处打开表单。默认值为_self,表示在原页面打开; _blank表示在新窗口打开;_top表示在顶级窗口打开;frameName表示在指定窗口打开。
- 表单中可以产生的动作只有两种:
- submit():提交表单
- reset():重置表单
- 表单里包含了几个常用表单元素,包括文本框(包括单行文本框text和密码passwd)、单选按钮radio、下拉列表框select、复选框checkbox以及按钮button(包括提交按钮submit和重置按钮reset)
<!DOCTYPE html>
<html>
<head>
<title>表单相关标记与表单元素</title>
</head>
<body>
<form method="post" name="myForm1" >
<p><label for="name">请输入您的姓名:</label><br><input type="text" name="name" id="name"></p>
<p><label for="passwd">请输入您的密码:</label><br><input type="password" name="passwd" id="passwd"></p>
<p><label for="color">请选择你最喜欢的颜色:</label><br>
<select name="color" id="color">
<option value="red">红</option>
<option value="green">绿</option>
<option value="blue">蓝</option>
<option value="yellow">黄</option>
<option value="cyan">青</option>
<option value="purple">紫</option>
</select></p>
<p>请选择你的性别:<br>
<input type="radio" name="sex" id="male" value="male"><label for="male">男</label><br>
<input type="radio" name="sex" id="female" value="female"><label for="female">女</label></p>
<p>你喜欢做些什么:<br>
<input type="checkbox" name="hobby" id="book" value="book"><label for="book">看书</label>
<input type="checkbox" name="hobby" id="net" value="net"><label for="net">上网</label>
<input type="checkbox" name="hobby" id="sleep" value="sleep"><label for="sleep">睡觉</label></p>
<p><label for="comments">我要留言:</label><br><textarea name="comments" id="comments" cols="30" rows="4"></textarea></p>
<p><input type="submit" name="btnSubmit" id="btnSubmit" value="提交">
<input type="reset" name="btnReset" id="btnReset" value="重置"></p>
</form>
</body>
</html>
<label for="name">用户会觉得更加友好,在用户点击“请输入您的姓名:”时,光标会自动移动到指定ID的控件上。for属性的值只能是<label>标签要关联的表单元素的id值。
6.3.2 用CSS控制表单样式
使用CSS可以定义表单元素的外观。下面主要从改变表单元素的字体样式、边框样式和背景颜色出发, 讨论怎样将 CSS 应用到表单中,从而达到美化表单的作用。
<style>
<!--
/* 直接控制各个标记 */
form {
border: 1px dotted #AAAAAA;
padding: 3px 6px 3px 6px;
background:#3399FF;
margin:0px;
font:14px Arial;
}
input {
color: #00008B;
background-color: #ADD8E6;
border: 1px solid #00008B;
}
select {
width: 80px;
color: #00008B;
background-color: #ADD8E6;
border: 1px solid #00008B;
}
textarea {
width: 200px;
height: 40px;
color: #00008B;
background-color: #ADD8E6;
border: 1px solid #00008B;
}
-->
</style>
6.3.3 访问表单中的元素
- 采用DOM 树中的定位元素的方法document.getElementById(),可以访问表单中的元素,如下代码可以获取用户在id 为 age 的下拉列表中的选择
var =user_age=document.getElementById("age")
- 还可以用document 的 forms 集合,并通过表单在forms 集合中的位置或者表单的 name 来进行引用。
var objForm=document.forms["form1"];
var userName=objForm.elements["user"];
或直接访问这个元素
var userName=document.form1.user;
6.3.4 公共属性与方法
- 表单元素具有一些共同属性和方法,常用的属性如下。
- id:规定了元素的唯一 ID 值。
- name:规定了元素的名字。
- type:规定了元素的类型。
- value:定义了元素的值,除下拉菜单外所有元素都具有该属性。
- checked:声明了一个单选按钮或者复选框是否被选中,选中状态该属性值为 true。
- 如下HTML代码为两个单选按钮,为了实现两者只能选其一的效果,只有设置它们的name属性值相同。
<input type="radio" name="sex" id="male" value="male"><label for="male">男</label><br>
<input type="radio" name="sex" id="female" value="female"><label for="female">女</label></p>
- 如下JavaScript代码,调用了表单中的单选按钮objRadio的checked和value属性,从而获取了用户选中按钮的值
var objRadio = document.form1.sex;
/*遍历表单中name值为sex的元素*/
for(var i = 0;i< objRadio.length;i++){
if(objRadio[i].checked){
user_sex=objRadio[i].value;
}
}
- 常用的一些方法
- blur:将焦点从该表单元素上移开,其作用与focus()方法相反
- focus:将焦点移动到该表单元素上
- click:相当于鼠标在表单元素上单击
- select:选中表单元素中可编辑的文本,如文本框
/*实现在浏览器中打开页面后,光标自动聚焦在form1中name为user的元素上*/
document.form1.user.focus();
6.3.5 提交表单
- 方法一:使用“提交”按钮或“图像”按钮。
<input type="submit" name="btnSubmit" value="提交" />
<input type="image" name="imgSubmit" src="imgSubmit.jpg" />
- 方法二:调用 JavaScript 的方法 submit()。
/*通过单击按钮提交表单,可以实现单击不同按钮提交表单到不同页面*/
<input type="button" value="提交到a页面" onclick="JavaScript:this.form.action='a.asp';this.form.submit()">
/*填写完表单直接提交,而不使用链接或按钮*/
objForm=document.getElementById("form1");
objForm.submit();
上述两种方法的区别是:单击“提交”按钮会触发 onsubmit 事件,而 submit() 方法不会触发该事件,因此在使用第二种方法提交表单时,需要在调用该方法之前完成表单的所有验证。