动态添加表格行
文/Ray
表格部分代码如下:
<table id="testTbl" border=1>
<tr id="tr1">
<td width=6%><input type=checkbox id="box1"></td>
<td id="b">第一行</td>
</tr>
<tr id="tr2">
<td width=6%><input type=checkbox id="box2"></td>
<td id="b">第二行</td>
</tr>
<tr bgcolor=#0000FF>
<td width=6%><input type=checkbox id="box3"></td>
<td>第三行</td>
</tr>
</table>
动态添加表行的javascript函数如下:
function addRow(){
//添加一行
var newTr = testTbl.insertRow();
//添加两列
var newTd0 = newTr.insertCell();
var newTd1 = newTr.insertCell();
//设置列内容和属性
newTd0.innerHTML = '<input type=checkbox id="box4">';
newTd2.innerText= '新加行';
}
就这么简单,做点详细的说明:
1、inserRow()和insertCell()函数
insertRow()函数可以带参数,形式如下:
insertRow(index)
这个函数将新行添加到index的那一行前,比如insertRow(0),是将新行添加到第一行之前。默认的insertRow()函数相当于insertRow(-1),将新行添加到表的最后。
insertCell()和insertRow的用法相同。
2、动态设置属性和事件
上面行数中的innerHTML和innerText都是列的属性。
这个inner,就是“inner”到<tb></tb>之间,innerText是添加到<tb></tb>之间的文本,innerHTML是添加到<tb></tb>之间的HTML代码(这个so简单,这个解释挺多余的)
设置其他属性也是用同样的方式,比如,设置行背景色
newTr.bgColor = 'red';
设置事件也一样,需要简单说明一点。
比如,我要让点击新加行的时候执行一个自己定义的函数 newClick,newClick行数如下:
function newClick(){
alert("这是新添加的行");
}
对onclick事件设置这个函数的代码如下:
newTr.onclick = newClick;
这里需要主义的是,=后面的部分必须是函数名,而且不能带引号,
newTr.onclick = newClick();
newTr.onclick = 'newClick';
newTr.onclick = "newClick";
上面的写法都是错误的。
为什么,其实知道为什么没有什么意思,知道怎么用就OK了,如果不想知道,可以跳过下面这一段。
实际上这个=后面的newClick是指向自己定义的newClick函数的指针,javascript里面函数名就是指向函数的指针,加了引号括号什么的浏览器就找不到那个函数了。
下面的写法,也是正确的
newTr.onclick = function newClick(){
alert("这是新添加的行");
}
例子
一、创建表格(观看效果) <html> <head> <title>Table test</title> </head> <body> <div id="tableTest"> </div> </body> </html> <script language="JavaScript" type="text/javascript"> <!-- //获取容器div的引用 var container=document.getElementById("tableTest"); //创建表格对象 var _table=document.createElement("table"); //设置表格属性 _table.setAttribute("border","1"); _table.setAttribute("borderColor","black"); _table.setAttribute("width","200"); //创建5行 for(var i=0;i<5;i++){ var _tr=_table.insertRow(i); //创建4列 for(var j=0;j<4;j++){ var _td=_tr.insertCell(j); var _tn=document.createTextNode(i.toString()+j.toString()); _td.appendChild(_tn); } } //将表格显示于页面 container.appendChild(_table); //--> </script> |
二、添加、删除行与列(观看效果)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Table test</title>
</head>
<body>
<table id="table1" bordercolor="#000000" width="200" border="1">
<tbody>
<tr>
<td>00</td>
<td>01</td>
<td>02</td>
<td>03</td>
</tr>
<tr>
<td>10</td>
<td>11</td>
<td>12</td>
<td>13</td>
</tr>
<tr>
<td>20</td>
<td>21</td>
<td>22</td>
<td>23</td>
</tr>
<tr>
<td>30</td>
<td>31</td>
<td>32</td>
<td>33</td>
</tr>
<tr>
<td>40</td>
<td>41</td>
<td>42</td>
<td>43</td>
</tr>
</tbody>
</table>
<br/>
<input type="button" value="删除一行" onclick="deleteRow()"/>
<input type="button" value="删除一列" onclick="deleteColumn()"/>
</body>
</html>
<script language="JavaScript" type="text/javascript">
<!--
//获得表格对象
var _table=document.getElementById("table1");
//定义函数,用于删除第一行
function deleteRow(){
_table.deleteRow(0);
}
//定义函数,用于删除第一列
function deleteColumn(){
//删除一列时需要对每一行分别进行列删除
for(var i=0;i<_table.rows.length;i++){
_table.rows[i].deleteCell(0);
}
}
//-->
</script>
三、交换两行的位置(观看效果)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Table test</title>
<style type="text/css">
<!--
td { text-align:center;font-size:12px;padding:3px;}
-->
</style>
</head>
<body>
<table id="table1" bordercolor="#000000" width="200" border="1">
<tbody>
<tr>
<td width="25%">1</td>
<td width="25%">11</td>
<!--使用javascript:void(0)是为了能够传递this参数到事件处理程序-->
<td width="25%"><a href="javascript:void(0)" onclick="moveUp(this)">上移</a></td>
<td width="25%"><a href="javascript:void(0)" onclick="moveDown(this)">下移</a></td>
</tr>
<tr>
<td>2</td>
<td>22</td>
<td><a href="javascript:void(0)" onclick="moveUp(this)">上移</a></td>
<td><a href="javascript:void(0)" onclick="moveDown(this)">下移</a></td>
</tr>
<tr>
<td>3</td>
<td>33</td>
<td><a href="javascript:void(0)" onclick="moveUp(this)">上移</a></td>
<td><a href="javascript:void(0)" onclick="moveDown(this)">下移</a></td>
</tr>
<tr>
<td>4</td>
<td>44</td>
<td><a href="javascript:void(0)" onclick="moveUp(this)">上移</a></td>
<td><a href="javascript:void(0)" onclick="moveDown(this)">下移</a></td>
</tr>
<tr>
<td>5</td>
<td>55</td>
<td><a href="javascript:void(0)" onclick="moveUp(this)">上移</a></td>
<td><a href="javascript:void(0)" onclick="moveDown(this)">下移</a></td>
</tr>
</tbody>
</table>
</body>
</html>
<script language="JavaScript" type="text/javascript">
<!--
function cleanWhitespace(element) {
//遍历element的子结点
for (var i = 0; i < element.childNodes.length; i++) {
var node = element.childNodes[i];
//判断是否是空白文本结点,如果是,则删除该结点
if (node.nodeType == 3 && !//S/.test(node.nodeValue))
node.parentNode.removeChild(node);
}
}
//获得表格对象
var _table=document.getElementById("table1");
cleanWhitespace(_table);
//使表格行上移,接收参数为链接对象
function moveUp(_a){
//通过链接对象获取表格行的引用
var _row=_a.parentNode.parentNode;
//如果不是第一行,则与上一行交换顺序
if(_row.previousSibling)swapNode(_row,_row.previousSibling);
}
//使表格行下移,接收参数为链接对象
function moveDown(_a){
//通过链接对象获取表格行的引用
var _row=_a.parentNode.parentNode;
//如果不是最后一行,则与下一行交换顺序
if(_row.nextSibling)swapNode(_row,_row.nextSibling);
}
//定义通用的函数交换两个结点的位置
function swapNode(node1,node2){
//获取父结点
var _parent=node1.parentNode;
//获取两个结点的相对位置
var _t1=node1.nextSibling;
var _t2=node2.nextSibling;
//将node2插入到原来node1的位置
if(_t1)_parent.insertBefore(node2,_t1);
else _parent.appendChild(node2);
//将node1插入到原来node2的位置
if(_t2)_parent.insertBefore(node1,_t2);
else _parent.appendChild(node1);
}
//-->
</script>
上周因为手头一个东西需要增加不定项目,左思右想没有找到一个好的解决办法。刚好旧友soot过来深圳,他给了我一个办法,用Javascript动态添加删除表格行的思路,并演示了一下,符合我的要求,于是拿出来与大家共分享
以下是我测试的代码
<%
If Request("dd")<>"" Then
Response.write(Ubound(split(request("dd"),",")))
End If
%>
<html>
<head>
<script>
var i = 0;
function add() {
i++;
var tbl = document.all.tbl;
var tr = tbl.insertRow();
var td = tr.insertCell();
td.innerHTML = "<input name='dd' value = 'dd"+i+"'>"
}
</script>
</head>
<body>
<form method=post>
<table id=tbl>
<tr><td><input name="dd" value = "dd0"></td></tr>
</table>
<INPUT TYPE="button" value="add" onclick="add()">
<INPUT TYPE="submit" value="submit">
</form>
</html>
添加之后同时将值存在一个隐藏表单域中,以便提交时使用,使用数组方法接收值。
今日在网上搜索,发现一个网友的博客中也有相关代码,于是帖过来一起参考。
<table id="idTB" border=0><!--注意id,与JS中的要相对应-->
<tr id=idTR>
<td>第一行 <input type='button'></td>
</tr>
</table>
<input type="button" onclick="addRow()" value="添加一行"><br>
<input type="button" onclick="delRow()" value="删除一行"> Row index:<input id="idIndex">(<a id="idFirst">1</a>~<a id="idLast">1</a>)
<script>
function addRow(){//添加表格的一行
oTR=idTB.insertRow(idTB.rows.length);
tmpNum=oTR.rowIndex;
oTD=oTR.insertCell(0);
oTD.innerText="第" + tmpNum+"行";//在该处添加的HTML代码会原封不动的显示在页面上
oTD.innerHTML="<input type='text' name='txt"+tmpNum+"'>";//要在该格添加的HTML代码填在这里,因为这里是text,注意不要重名了。
idLast.innerText=idTB.rows.length;
if(idTB.rows.length>0)
idFirst.innerText='1';
return true;
}
function delRow(){//删除表格的一行
sIndex=idIndex.value;
if(sIndex=='')
sIndex=idTB.rows.length-1;
else
sIndex=parseInt(sIndex)-1;
idTB.deleteRow(sIndex);
idLast.innerText=idTB.rows.length;
if(idTB.rows.length==0)
idFirst.innerText='0';
}
</script>
上周因为手头一个东西需要增加不定项目,左思右想没有找到一个好的解决办法。刚好旧友soot过来深圳,他给了我一个办法,用Javascript动态添加删除表格行的思路,并演示了一下,符合我的要求,于是拿出来与大家共分享
以下是我测试的代码
<%
If Request("dd")<>"" Then
Response.write(Ubound(split(request("dd"),",")))
End If
%>
<html>
<head>
<script>
var i = 0;
function add() {
i++;
var tbl = document.all.tbl;
var tr = tbl.insertRow();
var td = tr.insertCell();
td.innerHTML = "<input name='dd' value = 'dd"+i+"'>"
}
</script>
</head>
<body>
<form method=post>
<table id=tbl>
<tr><td><input name="dd" value = "dd0"></td></tr>
</table>
<INPUT TYPE="button" value="add" onclick="add()">
<INPUT TYPE="submit" value="submit">
</form>
</html>
添加之后同时将值存在一个隐藏表单域中,以便提交时使用,使用数组方法接收值。
今日在网上搜索,发现一个网友的博客中也有相关代码,于是帖过来一起参考。
<table id="idTB" border=0><!--注意id,与JS中的要相对应-->
<tr id=idTR>
<td>第一行 <input type='button'></td>
</tr>
</table>
<input type="button" onclick="addRow()" value="添加一行"><br>
<input type="button" onclick="delRow()" value="删除一行"> Row index:<input id="idIndex">(<a id="idFirst">1</a>~<a id="idLast">1</a>)
<script>
function addRow(){//添加表格的一行
oTR=idTB.insertRow(idTB.rows.length);
tmpNum=oTR.rowIndex;
oTD=oTR.insertCell(0);
oTD.innerText="第" + tmpNum+"行";//在该处添加的HTML代码会原封不动的显示在页面上
oTD.innerHTML="<input type='text' name='txt"+tmpNum+"'>";//要在该格添加的HTML代码填在这里,因为这里是text,注意不要重名了。
idLast.innerText=idTB.rows.length;
if(idTB.rows.length>0)
idFirst.innerText='1';
return true;
}
function delRow(){//删除表格的一行
sIndex=idIndex.value;
if(sIndex=='')
sIndex=idTB.rows.length-1;
else
sIndex=parseInt(sIndex)-1;
idTB.deleteRow(sIndex);
idLast.innerText=idTB.rows.length;
if(idTB.rows.length==0)
idFirst.innerText='0';
}
</script>
精通javascript编程
http://book.csdn.net/bookfiles/226/10022610688.shtml
http://book.csdn.net/bookfiles/226/10022610688.shtml
http://book.csdn.net/bookfiles/226/10022610688.shtml
http://book.csdn.net/bookfiles/226/10022610688.shtml
http://book.csdn.net/bookfiles/226/10022610688.shtml
http://book.csdn.net/bookfiles/226/10022610688.shtml
http://book.csdn.net/bookfiles/226/10022610688.shtml
http://book.csdn.net/bookfiles/226/10022610688.shtml
一个完整的例子
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content=" http://schemas.microsoft.com/intellisense/ie5">
<style type="text/css"> .button {}{ background-color: #003399; border-bottom-style:solid; color:#FFFFFF;font-size:12px; border-color:#000000; border-style:solid;cursor:pointer;border-width:thin; border-width:1px; padding-left:4px; padding-right:4px; padding-top:1px; padding-bottom:1px; }
.showtalbe {}{}
.showtable font{}{ color:#000000; font-size:12px; font-family:"新宋体"}
.showtable tbody{}{ background-color:#CCCCCC; font-size:12px;text-align:left;word-break:break-all;}
.showtable thead{}{ background-color:#003399; height:20px;line-height:15px; color:#FFFFFF; font-size:12px; font-family:"新宋体";text-align:left;}
.showtable td{}{padding-left:8px;}
.inputNormal {}{ font-size:12px; font-family:'新宋体'; color: #000000; cursor:pointer; background-color:#cccccc; width:200px; text-align:left; border-color: #cccccc; border-style:solid; border-width:1px; height:30px; overflow-x:hidden; overflow-y:auto; }
</style>
<script>
//给string增加去首尾空白的方法
String.prototype.trim = function(){return this.replace(/(^/s*)|(/s*$)/g, "");}
var startID = 1;
function $(objID)
{
return document.getElementById(objID);
}
//自动添加
function adddataauto()
{
var objTable =$("objTable");
var newID = startID++ ;
var newName = "name" + newID ;
addtr(newID,newName);
addoption(newID,newName);
}
//手工添加
function adddatamanual()
{
var newID = $("caseID").value;
var newName = $("caseName").value;
//检查数据格式是否正确
if(!checkregx(newID,newName))
return;
//检查ID是否存在
if(!findvalueinselect(newID,$("selectList")))
{
alert(newID + "已经存在");
return;
}
addtr(newID,newName);
addoption(newID,newName);
}
//表格中添加一行
function addtr(objID,objName)
{
//创建td节点
var td0= document.createElement("td");
var td1= document.createElement("td");
var td2= document.createElement("td");
var td3= document.createElement("td");
var deleteButton = document.createElement("input");
var checkBox = document.createElement("input");
var textArea = document.createElement("textarea");
//设置td样式
td0.setAttribute("width","26px");
td1.setAttribute("width","15px");
td2.setAttribute("width","73px");
td3.setAttribute("width","50px");
deleteButton.setAttribute("type","button");
deleteButton.setAttribute("id","deleteButton" + objID);
deleteButton.setAttribute("name","deleteBox"+ objID);
deleteButton.setAttribute("value","delete");
deleteButton.setAttribute("className","button");
deleteButton.setAttribute("class","button");//for ff
//设置deletebutton的事件
deleteButton.onclick = function(event)
{
if(event == null)
{
event = window.event; // For IE
}
var eventObj = event.srcElement? event.srcElement : event.target;
var tbodyNode = eventObj.parentNode.parentNode.parentNode;
var trNode = eventObj.parentNode.parentNode
var rowIndex = trNode.rowIndex;
var objTable = document.getElementById("objTable");
objTable.removeChild(tbodyNode);
deleteoptions(rowIndex-1);
}
//设置checkbox的样式
checkBox.setAttribute("type","checkbox");
checkBox.setAttribute("id","deleteBox");
checkBox.setAttribute("name","deleteBox");
checkBox.setAttribute("value",objID);
//设置checkbox的事件
checkBox.onclick = function(event)
{
if(event==null)
{
event = window.event;
}
var eventObj = event.srcElement? event.srcElement : event.target;
var checkBox = eventObj;
var trNode = checkBox.parentNode.parentNode
var textBoxNode = checkBox.parentNode.nextSibling.nextSibling.childNodes[0];
var checked =checkBox.checked;
if(checked)//被选中时的样式
{
trNode.style.backgroundColor="#8CC6FF";
textBoxNode.style.borderColor="#8CC6FF";
textBoxNode.style.backgroundColor="#8CC6FF";
}
else//取消选择时的样式
{
trNode.style.backgroundColor="#CCCCCC";
textBoxNode.style.backgroundColor="#CCCCCC";
textBoxNode.style.borderColor="#CCCCCC";
}
}
//设置textarea的样式
textArea.setAttribute("className","inputNormal");
textArea.setAttribute("class","inputNormal");//for ff
textArea.setAttribute("value",objName);
textArea.setAttribute("id","myText");
textArea.setAttribute("name","myText");
textArea.value = objName;//for ff
//设置textarea的事件
textArea.onfocus = function(event)
{
if(event==null)
{
event = window.event;
}
var obj = event.srcElement? event.srcElement : event.target;
obj.style.backgroundColor="#ffffff";
obj.style.height ="50px";
obj.style.cursor = "text";
obj.style.overflowY = "scroll";
obj.inFocus=true;
}
textArea.onmouseover= function(event)
{
if(event==null)
{
event = window.event;
}
var obj = event.srcElement? event.srcElement : event.target;
if(!obj.inFocus)
{
obj.style.borderColor="#FF0000";
obj.style.backgroundColor="#F0F8FF";
}
}
textArea.onmouseout= function(event)
{
if(event==null)
{
event = window.event;
}
var obj = event.srcElement? event.srcElement : event.target;
var checkBoxNode = obj.parentNode.previousSibling.previousSibling.firstChild;
if(obj.inFocus)//处于输入状态
return;
if(checkBoxNode.checked)//被选中
{
obj.style.borderColor = "#8CC6FF";
obj.style.backgroundColor="#8CC6FF";
return;
}
if(!obj.inFocus)
{
obj.style.borderColor = "#cccccc";
obj.style.backgroundColor="#cccccc";
}
}
textArea.onblur= function(event)
{
if(event==null)
{
event = window.event;
}
var obj = event.srcElement? event.srcElement : event.target;
var checkBoxNode = obj.parentNode.previousSibling.previousSibling.firstChild;
if(checkBoxNode.checked)
{
obj.style.borderColor = "#8CC6FF";
obj.style.backgroundColor="#8CC6FF";
}
else
{
obj.style.borderColor = "#cccccc";
obj.style.backgroundColor="#cccccc";
}
obj.style.height ="30px";
obj.style.overflowY = "auto";
obj.style.cursor = "pointer";
obj.inFocus=false;
}
td0.appendChild(checkBox);
td1.innerHTML = objID;
td2.appendChild(textArea);
td3.appendChild(deleteButton);
//创建tr节点
var trNode = document.createElement("tr");
trNode.appendChild(td0);
trNode.appendChild(td1);
trNode.appendChild(td2);
trNode.appendChild(td3);
//创建tbody节点,必须使用tbody,不然无法使用dom方式添家行,只能用insertRow
var trBody = document.createElement("tbody");
trBody.appendChild(trNode);
$("objTable").appendChild(trBody);
}
//下拉菜单中添加一项
function addoption(objID,objName)
{
var list1 = $("selectList");
var opNode = document.createElement("option");
opNode.text = objName;
opNode.value =objID;
//必须用add而不能用appendchild,用appendchid文本值显示不出来??
list1.options.add(opNode);
}
//查找select中的value
function findvalueinselect(p_objValue,p_objList)
{
for(i=0;i<p_objList.options.length;i++)
{
if(p_objList.options[i].value ==p_objValue)
return false;
}
return true;
}
//删除选中的行
function deleterows()
{
var objTable =$("objTable");
var boxList = document.getElementsByName("deleteBox");
var idArray = new Array();
for(i=0;i<boxList.length;i++)
{
if(boxList[i].checked ==true)
idArray.push(i);
}
var rowIndex;
var nextDiff =0;
//面试的时候没考虑到rowindex变化,连续删除出错
for(j=0;j< idArray.length;j++)
{
rowIndex = idArray[j]+1-nextDiff++
objTable.deleteRow(rowIndex);
deleteoptions(rowIndex-1);
}
}
//删除下拉菜单对应的项
function deleteoptions(itemIndex)
{
var list = $("selectList");
list.remove(itemIndex);
}
//提交数据到服务器
function checksubmit()
{
var postString = $("postString");
var boxList = document.getElementsByName("deleteBox");
var textList = document.getElementsByName("myText");
var idArray = new Array();
for(i=0;i<boxList.length;i++)
{
idArray.push(boxList[i].value + "|" + textList[i].value);
}
postString.value = idArray.join("-");
alert(postString.value);
}
//正则式验证输入格式
function checkregx(p_idCase,p_nameCase)
{
var regID=new RegExp("^[1-9]//d*$");
var idValue = p_idCase.trim();
var flag = true;
var regName=new RegExp("^[a-zA-Z_][0-9a-zA-Z-_.]*$");
var nameValue = p_nameCase.trim();;
var noticeText="";
if(regID.test(idValue)==false)
{
noticeText +="id必须为数字,并且大于0/n";
flag = false;
}
if(!regName.test(nameValue))
{
noticeText +="name格式不合法";
flag = false;
}
if(!flag)
{
alert(noticeText);
return false;
}
return true;
}
//应用自定义的css样式
function setcss()
{
var inputList = document.getElementsByTagName("input");
for(i= 0;i<inputList.length;i++)
{
//验证页面上的文本框
if( inputList[i].type == "button" ||
inputList[i].type == "submit" ||
inputList[i].type == "reset"
)
{
inputList[i].className="button";
}
}
}
//全选或者全不选
function selectall()
{
//ff中去name属性 ie中取id属性
var objList = document.getElementsByName("deleteBox");
for(i=0;i<objList.length;i++)
{
var checked =objList[i].checked;
objList[i].checked=checked?false:true;
var trNode = objList[i].parentNode.parentNode;
var textBoxNode = objList[i].parentNode.nextSibling.nextSibling.childNodes[0]
if(!checked)//没被选中
{
trNode.style.backgroundColor = "#8CC6FF";
textBoxNode.style.borderColor="#8CC6FF";
textBoxNode.style.backgroundColor="#8CC6FF";
}
else
{
trNode.style.backgroundColor = "#CCCCCC";
textBoxNode.style.backgroundColor="#CCCCCC";
textBoxNode.style.borderColor="#CCCCCC";
}
}
}
</script>
</HEAD>
<body onload="setcss();">
<form id="Form1" method="post" runat="server" onsubmit="return checksubmit();">
<input type="hidden" id="postString">
<div>
<table id="objTable" class="showtable">
<thead>
<tr>
<td width="26"><input type="checkbox" id="selectAll" onclick="selectall();"></td>
<td width="15">id</td>
<td width="210">name</td>
<td width="73">delete</td>
</tr>
</thead>
</table>
<table>
<tr>
<td>
<select id="selectList">
<option title="" value="0" selected>所有项目</option>
</select>
</td>
</tr>
</table>
<input type="button" value="add new row" onclick="adddataauto();"> <input type="button" value="delete rows" onclick="deleterows()">
<input type="submit" value="submit">
</div>
<table>
<tr>
<td style="HEIGHT: 21px">id 大于1</td>
<td style="HEIGHT: 25px">name 数字,字母,-_.</td>
</tr>
<tr>
<td><input type="text" id="caseID"></td>
<td><input type="text" id="caseName"></td>
</tr>
<tr>
<td><input type="reset" value=" reset "></td>
<td><input type="button" value="manual new" onclick="adddatamanual();"></td>
</tr>
</table>
</form>
</body>
</HTML>
关于如何删除掉select中的option元素,兼容IE、Firefox ...
[ 2006-10-31 15:56:04 | 作者: CNLei ]
之前使用的代码是:
function delOption(oSel){ // 删除option
if (oSel.selectedIndex>=0) {
oSel.options.remove(oSel.selectedIndex);
} else {
alert("请先至少选择一个关键字");
};
}
上述代码在IE下正常运行,但在Firefox下却报错:
oSel.options.remove is not a function.
最后发现只要作一下小改动就可兼容IE和FF :)
改动后的代码如下:
function delOption(oSel){ // 删除option
if (oSel.selectedIndex>=0) {
oSel.remove(oSel.selectedIndex);
} else {
alert("请先至少选择一个关键字");
};
}
上述两段代码的区别在于一个用了options,一个没用,即:
oSel.options.remove(oSel.selectedIndex);
oSel.remove(oSel.selectedIndex);
这两种写法IE都支持,但FF只支持后一种。
下面贴段完整的删除option的兼容IE、Firefox的实例代码,可一次删除多个被选中的options。
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312">
<head>
<head>
<title> 一次删除多个被选中的options , 兼容IE、Firefox ...</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<meta name="author" content="枫岩,
[email protected]">
<meta name="copyright" content="http://www.cnlei.com" />
<meta name="description" content="一次删除多个被选中的options,兼容IE、Firefox ..." />
<script type="text/javascript">
function delOption(oSel){
if (oSel.selectedIndex>=0) {
oSel.remove(oSel.selectedIndex);
delOption(oSel);
}
}
</script>
</head>
<body>
<h3>一次删除多个被选中的options , 兼容IE、Firefox ...</h3>
<form method="" action="">
<select class="SltBar" name="MySel" size="10" multiple="true">
<option value="IECN.NET">IECN.Net-JavaScript</option>
<option value="IECN.NET">IECN.Net-XHTML/CSS</option>
<option value="IECN.NET">IECN.Net-ASP/VBScript</option>
<option value="IECN.NET">IECN.Net-PHP/MySql</option>
<option value="IECN.NET">IECN.Net-.Net开发</option>
<option value="IECN.NET">IECN.Net-Java开发</option>
</select>
<input type="button" value="删除选中的option" onclick="delOption(this.form.MySel);" />
</form>
</body>
</html>
应用实例二:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312">
<head>
<head>
<title> 代码实例:添加、删除域名列表</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<meta name="author" content="枫岩,
[email protected]">
<meta name="copyright" content="http://www.cnlei.com" />
<meta name="description" content="一次删除多个被选中的options,兼容IE、Firefox ..." />
<script type="text/javascript">
function delOption(oSel){
if (oSel.selectedIndex>=0) {
oSel.remove(oSel.selectedIndex);
delOption(oSel);
}
}
function addOption(oSel,sVal){
for(var i=0;i<oSel.length;i++){
if (oSel.options[i].value==sVal){
alert("已存在:"+sVal+"/n/n请不要添加重复数据!");
return false;
}
}
var oOption=new Option(sVal,sVal);
oSel[oSel.length]=oOption;
}
</script>
</head>
<body>
<h3>一次删除多个被选中的options , 兼容IE、Firefox ...</h3>
<form method="" action="">
<input type="text" name="siteUrl" size="50" value="google.com" /> <input type="button" value="添加至列表" onclick="addOption(this.form.siteList,this.form.siteUrl.value);" /><br />
已有域名列表:<br />
<select name="siteList" size="10" multiple="true" size="10" style="width:300px;">
<option value="265.com">265.com</option>
<option value="cnlei.com">cnlei.com</option>
<option value="iecn.net">iecn.net</option>
<option value="dodo.hk">dodo.hk</option>
</select>
<input type="button" value="删除选中的域名" onclick="delOption(this.form.siteList);" />(可一次性选中多个进行删除)<br />
<input type="submit" class="InpBtn" value="保存已添加的域名列表" />
</form>
</body>
</html>