谢氏工作室 - 我的精彩
我的鬼迹~~~~<br> 我的网路生活~~~<br> 我的~~~~~~~~~~~~~<br> Email:mrshelly@hotmail.com



■用户登录
用户名:
密   码:
■站内搜索
 

■最后更新


■最新评论


■存档




■我的链接

Net-Tools







■网站排名情况


■水盟最新发表
共1页 1
   ADO 连接字串一网打尽    |   阅读全文   |   评论(1)  |  引用(trackback0)  

FROM:http://www.basic-ultradev.com/articles/ADOConnections/

ODBC DSNLess Connections:

MS Access ODBC DSNless connection

Driver={Microsoft Access Driver (*.mdb)};Dbq=c:\somepath\dbname.mdb;Uid=Admin;Pwd=pass;

dBase ODBC DSNless connection

Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\somepath\dbname.dbf;

Oracle ODBC DSNless connection

Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;Uid=admin;Pwd=pass;

MS SQL Server DSNless connection

Driver={SQL Server};Server=servername;Database=dbname;Uid=sa;Pwd=pass;

MS Text Driver DSNless connection

Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\somepath\;Extensions=asc,csv,tab,txt;Persist Security Info=False;

Visual Foxpro DSNless connection

Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=c:\somepath\dbname.dbc;Exclusive=No;

MySQL DSNless connection

driver={mysql}; database=yourdatabase;server=yourserver;uid=username;pwd=password;option=16386;

OLE DB Connections:

MS Access OLE DB connection

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\somepath\dbname.mdb;User Id=admin;Password=pass;

Oracle OLE DB connection

Provider=OraOLEDB.Oracle;Data Source=dbname;User Id=admin;Password=pass;

MS SQL Server OLE DB connection

Provider=SQLOLEDB;Data Source=machineName;Initial Catalog=dbname;User ID=sa;Password=pass;

MS SQL Server OLE DB connection using an IP address

Provider=SQLOLEDB; Data Source=xx.xx.xx.xx,1433; Network Library=DBMSSOCN; Initial Catalog=dbname;User ID=sa;Password=pass;

MS Text Driver OLE DB connection

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\yourpath;Extended Properties='text;FMT=Delimited'"

shelly 发表于  2004-10-26 15:56:15


   JS正则分割重组排序的实例。    |   阅读全文   |   评论(0)  |  引用(trackback0)  

<SCRIPT LANGUAGE="JavaScript1.2">

// The name string contains multiple spaces and tabs,
// and may have multiple spaces between first and last names.
names = new String ( "Harry Trump ;Fred Barney; Helen Rigby ;\
       Bill Abel ;Chris Hand ")

document.write ("---------- Original String" + "<BR>" + "<BR>");
document.write (names + "<BR>" + "<BR>");

// Prepare two regular expression patterns and array storage.
// Split the string into array elements.

// pattern: possible white space then semicolon then possible white space
pattern = /\s*;\s*/;

// Break the string into pieces separated by the pattern above and
// and store the pieces in an array called nameList
nameList = names.split (pattern);

// new pattern: one or more characters then spaces then characters.
// Use parentheses to "memorize" portions of the pattern.
// The memorized portions are referred to later.
pattern = /(\w+)\s+(\w+)/;

// New array for holding names being processed.
bySurnameList = new Array;

// Display the name array and populate the new array
// with comma-separated names, last first.
//
// The replace method removes anything matching the pattern
// and replaces it with the memorized string—second memorized portion
// followed by comma space followed by first memorized portion.
//
// The variables $1 and $2 refer to the portions
// memorized while matching the pattern.

document.write ("---------- After Split by Regular Expression" + "<BR>");
for ( i = 0; i < nameList.length; i++) {
   document.write (nameList[i] + "<BR>");
   bySurnameList[i] = nameList[i].replace (pattern, "$2, $1")
}

// Display the new array.
document.write ("---------- Names Reversed" + "<BR>");
for ( i = 0; i < bySurnameList.length; i++) {
   document.write (bySurnameList[i] + "<BR>")
}

// Sort by last name, then display the sorted array.
bySurnameList.sort();
document.write ("---------- Sorted" + "<BR>");
for ( i = 0; i < bySurnameList.length; i++) {
   document.write (bySurnameList[i] + "<BR>")
}

document.write ("---------- End" + "<BR>")

</SCRIPT>


 

执行结果:
shelly 发表于  2004-10-26 15:56:15


   通用表单验证函数(JS)    |   阅读全文   |   评论(2)  |  引用(trackback1)  

FROM:http://blog.csdn.net/wanghr100/archive/2004/08/23/CheckForm.aspx

不管是动态网站,还是其它B/S结构的系统,都离不开表单
表单做为客户端向服务器提交数据的载体担当相当重要的角色.
这就引出了一个问题,提交的数据合法吗?摆在我们面前的问题就是验证这些数据
保证所提交的数据是合法的.所以,我们写了一个大堆的验证函数.当我们开始新的一个
项目的开发时,我们又得写一大堆的验证函数,然后再调试这一大堆的函数...

本文将介绍一种方法来提高我的代码的可重用性,提高我们的开发效率.

个人以为表单的验证应该包含两部分:
第一,判断用户输入的数据是否合法.
第二,提示用户你的数据为什么是不合法的.

所以,我们的通用表单验证函数要实现的功能就是:
第一,取得用户输入的数据GetValue(el)
第二,验证用户的数据CheckForm(oForm)
IE支持自定义属性,这就是这个通用函数实现的基础
我们可以在表单元素上加入描述自身信息的属性.有点像XML吧.
check属性:该属性用于存储数据合法性的正则表达式.
warning属性:该性性用于存储出错误提示信息.
第三,返回有误的表单提示GoBack(el)
这三个步骤的触发事件是onsubmit,记住是return CheckForm(this)
搞错了就全功尽弃了 :)
<form onsubmit="return CheckForm(this)">

写到这里,整体框架就出来了,通过取得表单元素的check属性,取得字符串,构建正则表达式.再验证其值.如果通过验证就提交,如是数据不合法则取得表单元素的warning属性,产生提示信息.并返回到该表单元素.整个的框架也比较简单.
我们要做的就是写好正则表达式!

接下来我们来分析一下所有的表单元素
按其共性,我们将它们分为三类
每类表单的特点不一样,我们的目标就是写出通用的.

1.文输入框Text
<input type="text" name="txt">
<input type="password" name="pwd">
<input type="hidden" name="hid">
<input type="file" name="myfile">
<textarea name="txts"></textarea>
2.单多选框Choose
<input type="checkbox" name="c">
<input type="checkbox" name="c">
<input type="radio" name="r">
<input type="radio" name="r">
3.单多下拉菜单Select
<select name="sel"></select>
<select name="sels" multiple></select>


讲了一堆"大道理"太抽象了,代码更有说服力!

Check.js   JS函数文件
////////////////////////////////////////////////////////////////////////////////
/*
 *--------------- 客户端表单通用验证CheckForm(oForm) -----------------
 * 功能:通用验证所有的表单元素.
 * 使用:
 *    <form name="form1" onsubmit="return CheckForm(this)">
 *    <input type="text" name="id" check="^\S+$" warning="id不能为空,且不能含有空格">
 *    <input type="submit">
 *    </form>
 * author:wanghr100(灰豆宝宝.net)
 * email:wanghr100@126.com
 * update:19:28 2004-8-23
 * 注意:写正则表达式时一定要小心.不要让"有心人"有空子钻.
 * 已实现功能:
 * 对text,password,hidden,file,textarea,select,radio,checkbox进行合法性验证
 * 待实现功能:把正则表式写成个库.
 *--------------- 客户端表单通用验证CheckForm(oForm) -----------------
 */
////////////////////////////////////////////////////////////////////////////////

//主函数
function CheckForm(oForm)
{
    var els = oForm.elements;
    //遍历所有表元素
    for(var i=0;i<els.length;i++)
    {
        //是否需要验证
        if(els[i].check)
        {
            //取得验证的正则字符串
            var sReg = els[i].check;
            //取得表单的值,用通用取值函数
            var sVal = GetValue(els[i]);
            //字符串->正则表达式,不区分大小写
            var reg = new RegExp(sReg,"i");
            if(!reg.test(sVal))
            {
                //验证不通过,弹出提示warning
                alert(els[i].warning);
                //该表单元素取得焦点,用通用返回函数
                GoBack(els[i]) 
                return false;
            }
        }
    }
}

//通用取值函数分三类进行取值
//文本输入框,直接取值el.value
//单多选,遍历所有选项取得被选中的个数返回结果"00"表示选中两个
//单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个

function GetValue(el)
{
    //取得表单元素的类型
    var sType = el.type;
    switch(sType)
    {
        case "text":
        case "hidden":
        case "password":
        case "file":
        case "textarea": return el.value;
        case "checkbox":
        case "radio": return GetValueChoose(el);
        case "select-one":
        case "select-multiple": return GetValueSel(el);
    }
    //取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
    function GetValueChoose(el)
    {
        var sValue = "";
        //取得第一个元素的name,搜索这个元素组
        var tmpels = document.getElementsByName(el.name);
        for(var i=0;i<tmpels.length;i++)
        {
            if(tmpels[i].checked)
            {
                sValue += "0";
            }
        }
        return sValue;
    }
    //取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
    function GetValueSel(el)
    {
        var sValue = "";
        for(var i=0;i<el.options.length;i++)
        {
            //单选下拉框提示选项设置为value=""
            if(el.options[i].selected && el.options[i].value!="")
            {
                sValue += "0";
            }
        }
        return sValue;
    }
}

//通用返回函数,验证没通过返回的效果.分三类进行取值
//文本输入框,光标定位在文本输入框的末尾
//单多选,第一选项取得焦点
//单多下拉菜单,取得焦点

function GoBack(el)
{
    //取得表单元素的类型
    var sType = el.type;
    switch(sType)
    {
        case "text":
        case "hidden":
        case "password":
        case "file":
        case "textarea": el.focus();var rng = el.createTextRange(); rng.collapse(false); rng.select();
        case "checkbox":
        case "radio": var els = document.getElementsByName(el.name);els[0].focus();
        case "select-one":
        case "select-multiple":el.focus();
    }
}

 


demo.htm  演示文件

<script language="JavaScript" src="Check.js"></script>
通用表单函数测试:
<form name="form1" onsubmit="return CheckForm(this)">
test:<input type="text" name="test">不验证<br>
账号:<input type="text" check="^\S+$" warning="账号不能为空,且不能含有空格" name="id">不能为空<br>
密码:<input type="password" check="\S{6,}" warning="密码六位以上" name="id">六位以上<br>
电话:<input type="text" check="^\d+$" warning="电话号码含有非法字符" name="number" value=""><br>
相片上传:<input type="file" check="(.*)(\.jpg|\.bmp)$" warning="相片应该为JPG,BMP格式的" name="pic" value="1"><br>
出生日期:<input type="text" check="^\d{4}\-\d{1,2}-\d{1,2}$" warning="日期格式2004-08-10"  name="dt" value="">日期格式2004-08-10<br>
省份:
<select name="sel" check="^0$" warning="请选择所在省份">
<option value="">请选择
<option value="1">福建省
<option value="2">湖北省
</select>
<br>
选择你喜欢的运动:<br>
游泳<input type="checkbox" name="c" check="^0{2,}$" warning="请选择2项或以上">
篮球<input type="checkbox" name="c">
足球<input type="checkbox" name="c">
排球<input type="checkbox" name="c">
<br>
你的学历:
大学<input type="radio" name="r" check="^0$" warning="请选择一项学历">
中学<input type="radio" name="r">
小学<input type="radio" name="r">
<br>
个人介绍:
<textarea name="txts" check="^[\s|\S]{20,}$" warning="个人介绍不能为空,且不少于20字"></textarea>20个字以上
<input type="submit">
</form>


附:
Microsoft Windows脚本技术,这里有正则表达式的介绍
http://www.dqcn.net/net/CSDN/Book/SCRIPT56.chm
一个很不错的正则表达式网站,里面收集了很多的正则表达式.直接拿来主义吧.
http://www.regexlib.com/Default.aspx

shelly 发表于  2004-08-24 08:29:53


   完美关窗JS~~    |   阅读全文   |   评论(4)  |  引用(trackback1)  

FROM:CSDN              原作:fason

论坛里问这个问题的多不胜数,但回答都不尽人意,没有考虑到I浏览器的类型,版本,希望这一文章能帮到大家,有错请指教!本程序ie5,6,ns7下通过

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>New Page 1</title>
<!--
by fason(2003-5-20)
-->
</head>
<body>
<script language="JavaScript">
<!--
function CloseWin()
{
var ua=navigator.userAgent
var ie=navigator.appName=="Microsoft Internet Explorer"?true:false
if(ie){
    var IEversion=parseFloat(ua.substring(ua.indexOf("MSIE ")+5,ua.indexOf(";",ua.indexOf("MSIE "))))
 if(IEversion< 5.5){
    var str  = '<object id=noTipClose classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">'
    str += '<param name="Command" value="Close"></object>';
    document.body.insertAdjacentHTML("beforeEnd", str);
    document.all.noTipClose.Click();
    }
    else{
    window.opener =null;
    window.close();
    }
}
else{
window.close()
}
}
//-->
</script>
<input type=button value=关闭 onclick="CloseWin()">
</body>
</html>

shelly 发表于  2004-06-07 07:44:29


   JS部分通用函数    |   阅读全文   |   评论(0)  |  引用(trackback2)  

FROM : CSDN

 

JavaScript(一)

VisualSW

JavaScriptWEB编程中能起到很大的作用,将一些常用的功能写成JavaScript类库。

将下面代码保存为Common.js

类库功能:

1.Trim(str)--去除字符串两边的空格

2.XMLEncode(str)--对字符串进行XML编码

3.ShowLabel(str,str)--鼠标提示功能(显示字符,提示字符)

可以设置显示的提示的文字的字体、颜色、大小以及提示的背景颜色、边框等

4.IsEmpty(obj)--验证输入框是否为空

5.IsInt(objStr,sign,zero)--验证是否为整数,正整数,负整数,以及是否包括零

6.IsFloat(objStr,sign,zero)--验证是否为浮点数,正浮点,负浮点,以及是否包括零

7.IsEnLetter(objStr,size)--验证是否为26个字母,大写小

 

源代码如下:

/*

       名字:Common.js

       功能:通用JavaScript脚本函数库

       包括:

                     1.Trim(str)--去除字符串两边的空格

                     2.XMLEncode(str)--对字符串进行XML编码

            3.ShowLabel(str,str)--鼠标提示功能(显示字符,提示字符)

                     4.IsEmpty(obj)--验证输入框是否为空

                     5.IsInt(objStr,sign,zero)--验证是否为整数

                     6.IsFloat(objStr,sign,zero)--验证是否为浮点数

                     7.IsEnLetter(objStr,size)--验证是否为26个字母

 

    作者:申旺

    日期:2004/04/14

*/

 

/*

==================================================================

字符串操作

Trim(string):去除字符串两边的空格

==================================================================

*/

 

/*

==================================================================

LTrim(string):去除左边的空格

==================================================================

*/

function LTrim(str)

{

    var whitespace = new String(" \t\n\r");

    var s = new String(str);

   

    if (whitespace.indexOf(s.charAt(0)) != -1)

    {

        var j=0, i = s.length;

        while (j < i && whitespace.indexOf(s.charAt(j)) != -1)

        {

            j++;

        }

        s = s.substring(j, i);

    }

    return s;

}

 

/*

==================================================================

RTrim(string):去除右边的空格

==================================================================

*/

function RTrim(str)

{

    var whitespace = new String(" \t\n\r");

    var s = new String(str);

 

    if (whitespace.indexOf(s.charAt(s.length-1)) != -1)

    {

        var i = s.length - 1;

        while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)

        {

            i--;

        }

        s = s.substring(0, i+1);

    }

    return s;

}

 

/*

==================================================================

Trim(string):去除前后空格

==================================================================

*/

function Trim(str)

{

    return RTrim(LTrim(str));

}

 

 

 

/*

================================================================================

XMLEncode(string):对字符串进行XML编码

================================================================================

*/

function XMLEncode(str)

{

       str=Trim(str);

       str=str.replace("&","&amp;");

       str=str.replace("<","&lt;");

       str=str.replace(">","&gt;");

       str=str.replace("'","&apos;");

       str=str.replace("\"","&quot;");

       return str;

}

 

/*

================================================================================

验证类函数

================================================================================

*/

 

function IsEmpty(obj)

{

    obj=document.getElementsByName(obj).item(0);

    if(Trim(obj.value)=="")

    {

        alert("字段不能为空。");       

        if(obj.disabled==false && obj.readOnly==false)

        {

            obj.focus();

        }

    }

}

 

/*

IsInt(string,string,int or string):(测试字符串,+ or - or empty,empty or 0)

功能:判断是否为整数、正整数、负整数、正整数+0、负整数+0

*/

function IsInt(objStr,sign,zero)

{

    var reg;   

    var bolzero;   

   

    if(Trim(objStr)=="")

    {

        return false;

    }

    else

    {

        objStr=objStr.toString();

    }   

   

    if((sign==null)||(Trim(sign)==""))

    {

        sign="+-";

    }

   

    if((zero==null)||(Trim(zero)==""))

    {

        bolzero=false;

    }

    else

    {

        zero=zero.toString();

        if(zero=="0")

        {

            bolzero=true;

        }

        else

        {

            alert("检查是否包含0参数,只可为(空、0)");

        }

    }

   

    switch(sign)

    {

        case "+-":

            //整数

            reg=/(^-?|^\+?)\d+$/;           

            break;

        case "+":

            if(!bolzero)          

            {

                //正整数

                reg=/^\+?[0-9]*[1-9][0-9]*$/;

            }

            else

            {

                //正整数+0

                //reg=/^\+?\d+$/;

                reg=/^\+?[0-9]*[0-9][0-9]*$/;

            }

            break;

        case "-":

            if(!bolzero)

            {

                //负整数

                reg=/^-[0-9]*[1-9][0-9]*$/;

            }

            else

            {

                //负整数+0

                //reg=/^-\d+$/;

                reg=/^-[0-9]*[0-9][0-9]*$/;

            }            

            break;

        default:

            alert("检查符号参数,只可为(空、+-)");

            return false;

            break;

    }

   

    var r=objStr.match(reg);

    if(r==null)

    {

        return false;

    }

    else

    {       

        return true;    

    }

}

 

/*

IsFloat(string,string,int or string):(测试字符串,+ or - or empty,empty or 0)

功能:判断是否为浮点数、正浮点数、负浮点数、正浮点数+0、负浮点数+0

*/

function IsFloat(objStr,sign,zero)

{

    var reg;   

    var bolzero;   

   

    if(Trim(objStr)=="")

    {

        return false;

    }

    else

    {

        objStr=objStr.toString();

    }   

   

    if((sign==null)||(Trim(sign)==""))

    {

        sign="+-";

    }

   

    if((zero==null)||(Trim(zero)==""))

    {

        bolzero=false;

    }

    else

    {

        zero=zero.toString();

        if(zero=="0")

        {

            bolzero=true;

        }

        else

        {

            alert("检查是否包含0参数,只可为(空、0)");

        }

    }

   

    switch(sign)

    {

        case "+-":

            //浮点数

            reg=/^((-?|\+?)\d+)(\.\d+)?$/;

            break;

        case "+":

            if(!bolzero)          

            {

                //正浮点数

                reg=/^\+?(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;

            }

            else

            {

                //正浮点数+0

                reg=/^\+?\d+(\.\d+)?$/;

            }

            break;

        case "-":

            if(!bolzero)

            {

                //负浮点数

                reg=/^-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;

            }

            else

            {

                //负浮点数+0

                reg=/^((-\d+(\.\d+)?)|(0+(\.0+)?))$/;

            }           

            break;

        default:

            alert("检查符号参数,只可为(空、+-)");

            return false;

            break;

    }

   

    var r=objStr.match(reg);

    if(r==null)

    {

        return false;

    }

    else

    {       

        return true;    

    }

}

 

 

JavaScript通用库(二)

VisualSW

 

 

/*

IsEnLetter(string,string):引用(trackback2)  

<script language="JavaScript" type="text/JavaScript">
/*---------------------------------------------------------------------------
表格、单元格操作类
作者:龙卫国
user:lwg888
email:lwg888@163.com
时间:2004-2-17
功能:
    合并单元格,拆分单元格,向上插入行,向下插入行,向左插入列,
 向右插入列,删除行,删除列
设计思路:
    将表格按总行与总列数进行网状分割,为每个座标网格找到对应的单元格,
 这样,在操作过程中就可以随时找出每个单元格的位置及属性
适用IE5.0以上
转载请保留作者信息
-----------------------------------------------------------------------------*/

function LwgTable(){
    this.tdobj;
 this.trobj;
 this.tblobj;
 this.xy=new Array();
 this.x;
 this.y;
}

function tmpObj (x,y,obj) {
    this.x   = x;
 this.y   = y;
 this.obj = obj;
}

LwgTable.prototype.getObj=function(){
    var tdobj=document.selection.createRange().parentElement();
 if (!tdobj || tdobj.tagName != "TD")return false;
 var trobj=tdobj.parentElement;
 if (!trobj || trobj.tagName != "TR")return false;
 var tblobj=trobj.parentElement.parentElement;
 if (!tblobj || tblobj.tagName != "TABLE")return false;
 this.tdobj=tdobj;
 this.trobj=trobj;
 this.tblobj=tblobj;
 return true;
}

LwgTable.prototype.setxy=function(){
 for (var i=0;i<this.tblobj.rows.length;i++)
     this.xy[i]=new Array();
 
 for (var i=0;i<this.tblobj.rows.length;i++){
  var tmp_row=this.tblobj.rows[i];
  var tmp_y=0;
  for (var n=0;n<tmp_row.cells.length;n++){
      var tmp_cell=tmp_row.cells[n];
   if (this.tdobj==tmp_cell){
       this.x=i;
    tmp_y=this.y=this.findy(i,tmp_y);
   }
   for (var c=0;c<tmp_cell.colSpan;c++){
       for (var r=0;r<tmp_cell.rowSpan;r++){
     var tmp_ir=i+r;
     var tmp_y=this.findy(tmp_ir,tmp_y);
     if (c==0 && r==0) var tmp_obj=new tmpObj(i,tmp_y,tmp_cell);
     this.xy[tmp_ir][tmp_y]=tmp_obj;
    }
   }
   tmp_y++;
  }
 }
}

LwgTable.prototype.findy=function(x,y){
    if (!this.xy[x][y])return y;
 else return this.findy(x,y+1);
}

LwgTable.prototype.mergeCell = function (what){
 switch (what){
   case "up":
  var tmp_obj=this.checkToMerge(-1,0);
  if (!tmp_obj)return false;
  if (this.tdobj.innerHTML != "&nbsp;")tmp_obj.obj.innerHTML+=this.tdobj.innerHTML;
  tmp_obj.obj.rowSpan+=this.dropCell(this.trobj.rowIndex,this.tdobj.cellIndex,'r');
     break;
   case "down":
  var tmp_obj=this.checkToMerge(this.tdobj.rowSpan,0);
  if (!tmp_obj)return false;
  if (tmp_obj.obj.innerHTML != "&nbsp;")this.tdobj.innerHTML+=tmp_obj.obj.innerHTML;
  this.tdobj.rowSpan+=this.dropCell(this.trobj.rowIndex+this.tdobj.rowSpan,tmp_obj.obj.cellIndex,'r');
     break;
   case "left":
  var tmp_obj=this.checkToMerge(0,-1);
  if (!tmp_obj)return false;
  if (this.tdobj.innerHTML != "&nbsp;")tmp_obj.obj.innerHTML+=this.tdobj.innerHTML;
  tmp_obj.obj.colSpan+=this.dropCell(this.trobj.rowIndex,this.tdobj.cellIndex,'c');
     break;
   case "right":
  var tmp_obj=this.checkToMerge(0,this.tdobj.colSpan);
  if (!tmp_obj)return false;
  if (tmp_obj.obj.innerHTML != "&nbsp;")this.tdobj.innerHTML+=tmp_obj.obj.innerHTML;
  this.tdobj.colSpan+=this.dropCell(this.trobj.rowIndex,this.tdobj.cellIndex+1,'c');
  break;
   default :
     break;
 }
}

LwgTable.prototype.checkToMerge = function (x,y){
 if (!this.xy[this.x+x])return false;
 var tmp_obj=this.xy[this.x+x][this.y+y];
 if (!tmp_obj)return false;
 if (x!=0){
  if (tmp_obj.y!=this.y || tmp_obj.obj.colSpan!=this.tdobj.colSpan)return false;
 }
 else if (y != 0){
  if (tmp_obj.x!=this.x || tmp_obj.obj.rowSpan!=this.tdobj.rowSpan)return false;
 }
 return tmp_obj;
}

LwgTable.prototype.dropCell=function (x,y,kind){
 var trobj=this.tblobj.rows[x];
 if (!trobj)return false;
 var rowspans=trobj.cells[y].rowSpan;
 var colspans=trobj.cells[y].colSpan;
 trobj.deleteCell(y);
 if (kind=="r")return rowspans;
 else if (kind=="c")return colspans;
}

LwgTable.prototype.changeRowspan = function (x,num){
 var y=0;
 while (y<this.xy[x].length){
  var tmp=this.xy[x][y];
  if (tmp.obj.rowSpan > 1){
   tmp.obj.rowSpan+=num;
  }
  y+=tmp.obj.colSpan;
 }
}

LwgTable.prototype.insertRow = function (what,num){
 var x  = this.x;
 var x1 = (what=='up') ? x : (x + 1);
 if (x1==this.tblobj.rows.length){
     for (var n=0;n<num;n++){
      var newRow=this.tblobj.insertRow(x1);
   var lastxy=this.xy[this.xy.length-1];
   var i=0;
   while (i<lastxy.length){
       var newCell=newRow.insertCell();
    newCell.innerHTML="&nbsp;";
    newCell.mergeAttributes(lastxy[i].obj);
    newCell.rowSpan=1
    i+=lastxy[i].obj.colSpan;
   }
  }
  return true;
 }
 for (var n=0;n<num;n++){
     var trobj=this.tblobj.rows[x];
     var newRow=this.tblobj.insertRow(x1);
     var delcell=new Array();
     for(var i=0;i<trobj.cells.length;i++){
      if (trobj.cells[i].rowSpan==1){
       var newCell=newRow.insertCell();
    newCell.innerHTML="&nbsp;";
          newCell.mergeAttributes(trobj.cells[i])
      }
   else if (what=='up'){
       var newCell=newRow.insertCell();
    trobj.cells[i].rowSpan+=1;
       newCell.innerHTML=trobj.cells[i].innerHTML;
       delcell[i]=1;
          newCell.mergeAttributes(trobj.cells[i])
      }
     }
     var deli=0;
     for (i in delcell){
         trobj.deleteCell(i-deli);
      deli++;
     }
 }
 this.changeRowspan(this.x,num);
}

LwgTable.prototype.deleteRow = function (){
 if (this.trobj.rowIndex==this.tblobj.rows.length-1){
     this.tblobj.deleteRow(this.trobj.rowIndex);
        return true;
 }
 var y=0;
 while (y<this.xy[this.x].length){
     var tmp_obj=this.xy[this.x][y].obj;
  if (tmp_obj.rowSpan > 1){
      tmp_obj.rowSpan-=1;
   if (tmp_obj.parentElement.rowIndex == this.x){
    if (tmp_obj.cellIndex<this.trobj.cells.length-1)var cellIndex=this.xy[this.x+1][y+tmp_obj.colSpan].obj.cellIndex;
    else var cellIndex=this.tblobj.rows[this.x+1].cells.length;
    newCell=this.tblobj.rows[this.x+1].insertCell(cellIndex)
       newCell.replaceNode(tmp_obj);
   }
  }
  y+=tmp_obj.colSpan;
 }
 this.tblobj.deleteRow(this.trobj.rowIndex);
}

LwgTable.prototype.deleteCol = function (){
    var x=0;
 while (x<this.xy.length){
     var tmp_obj=this.xy[x][this.y].obj;
  x+=tmp_obj.rowSpan
  if (tmp_obj.colSpan==1){
      tmp_obj.parentElement.deleteCell(tmp_obj.cellIndex);
  }
  else tmp_obj.colSpan-=1;
 }
}

LwgTable.prototype.insertCol = function (what,num){
 var x=0;
 while (x<this.xy.length){
     var tmp_obj=this.xy[x][this.y].obj;
  x+=tmp_obj.rowSpan
  if (tmp_obj.colSpan==1){
      var cellIndex=(what=="right")?(tmp_obj.cellIndex+1):tmp_obj.cellIndex;
   for (var n=0;n<num;n++){
       var newCell=tmp_obj.parentElement.insertCell(cellIndex);
    newCell.innerHTML="&nbsp;";
          newCell.mergeAttributes(tmp_obj)
   }
  }
  else tmp_obj.colSpan+=num;
 }
}

LwgTable.prototype.rowSplit = function (num){
    if (num<2)return false;
 while (num>1){
     var y=0;
  var tmp_x=this.x+this.tdobj.rowSpan-1;
  var tmp_index=0;
  while (y<this.xy[tmp_x].length){
      var tmp_obj=this.xy[tmp_x][y]
   if(this.tdobj.rowSpan>1){
    if (tmp_obj.obj==this.tdobj){
        var newCell=this.tblobj.rows[tmp_x].insertCell(tmp_index);
        newCell.innerHTML="&nbsp;";
              newCell.mergeAttributes(this.tdobj)
     newCell.rowSpan=1
    }
    if (tmp_x==tmp_obj.x)tmp_index++;
   }
   else {
    if (tmp_obj.obj==this.tdobj){
        var newRow=this.tblobj.insertRow(this.x+1);
     var newCell=newRow.insertCell(0);
        newCell.innerHTML="&nbsp;";
    }
    else tmp_obj.obj.rowSpan+=1;
   }
      y+=tmp_obj.obj.colSpan;
  }
  if(this.tdobj.rowSpan>1)this.tdobj.rowSpan-=1
  num-=1
 }
}

LwgTable.prototype.colSplit = function (num){
 var x=0;
 while (x<this.xy.length){
     var tmp_obj=this.xy[x][this.y].obj;
  x+=tmp_obj.rowSpan
  if (tmp_obj==this.tdobj){
   for (var n=0;n<num;n++){
       var newCell=tmp_obj.parentElement.insertCell(this.tdobj.cellIndex);
    newCell.innerHTML="&nbsp;";
          newCell.mergeAttributes(tmp_obj)
   }
  }
  else tmp_obj.colSpan+=num;
 }
}

function table_change(){
    var t=new LwgTable();
 if (!t.getObj())return false;
 t.setxy();
 var args=table_change.arguments;
 switch (args[0]){
     case "insertrow_up":
    t.insertRow('up',args[1])
       break
     case "insertrow_down":
       t.insertRow('down',args[1])
    break
     case "deleterow":
       t.deleteRow()
    break
     case "deletecol":
       t.deleteCol()
    break
     case "insertcol_left":
       t.insertCol('left',args[1])
    break
     case "insertcol_right":
       t.insertCol('right',args[1])
    break
     case "rowsplit":
       t.rowSplit(args[1])
    break
     case "colsplit":
       t.colSplit(args[1])
    break
     case "merge":
       t.mergeCell(args[1]);
    break
  default:
    break;
 }
}

</script>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<table border="0" cellpadding="5" cellspacing="1" bgcolor="#999999">
  <tr bgcolor="#FFFFFF">
    <td align="right" bgcolor="#efefef">合并单元格</td>
    <td><input type="button" name="Submit2" value="向上" onClick="table_change('merge','up')">
  <input type="button" name="Submit22" value="向下" onClick="table_change('merge','down')">
      <input type="button" name="Submit23" value="向左" onClick="table_change('merge','left')">
      <input type="button" name="Submit24" value="向右" onClick="table_change('merge','right')"></td>
  </tr>
  <tr bgcolor="#FFFFFF">
    <td align="right" bgcolor="#efefef">拆分单元格</td>
    <td><input type="button" name="Submit2424" value="拆成3行" onClick="table_change('rowsplit',3)">
      <input type="button" name="Submit24242" value="拆成2列" onClick="table_change('colsplit',2)"></td>
  </tr>
  <tr bgcolor="#FFFFFF">
    <td align="right" bgcolor="#efefef">插入行</td>
    <td><input type="button" name="Submit242" value="向上插入3行" onClick="table_change('insertrow_up',3)">
      <input type="button" name="Submit2422" value="向下插入2行" onClick="table_change('insertrow_down',2)"></td>
  </tr>
  <tr bgcolor="#FFFFFF">
    <td align="right" bgcolor="#efefef">插入列</td>
    <td><input type="button" name="Submit2423" value="向左插入3列" onClick="table_change('insertcol_left',3)">
      <input type="button" name="Submit24223" value="向右插入2列" onClick="table_change('insertcol_right',2)"></td>
  </tr>
  <tr bgcolor="#FFFFFF">
    <td align="right" bgcolor="#efefef">删除行</td>
    <td><input type="button" name="Submit24222" value="删除行" onClick="table_change('deleterow')"></td>
  </tr>
  <tr bgcolor="#FFFFFF">
    <td align="right" bgcolor="#efefef">删除列</td>
    <td><input type="button" name="Submit242222" value="删除列" onClick="table_change('deletecol')"></td>
  </tr>
</table>
使用方式:先在单元格中建立一个选区,再点击上面按钮<br>
<table width="100%" border="1">
  <tr>
    <td colspan="2">1</td>
    <td>2</td>
    <td>3</td>
  </tr>
  <tr>
    <td bgcolor="#CCCCCC">&nbsp;</td>
    <td rowspan="2">47</td>
    <td>5</td>
    <td>6</td>
  </tr>
  <tr>
    <td rowspan="3">45</td>
    <td>8</td>
    <td bgcolor="#CCCCCC">9</td>
  </tr>
  <tr>
    <td rowspan="3">10</td>
    <td bgcolor="#FFFFCC">11</td>
    <td rowspan="2">1214</td>
  </tr>
  <tr>
    <td bgcolor="#CCCCCC">13</td>
  </tr>
  <tr>
    <td>123</td>
    <td bgcolor="#CCCCCC">&nbsp;</td>
    <td>6</td>
  </tr>
</table>