高table操作.php

来自「php绿色服务器,让大家试用greenamp」· PHP 代码 · 共 424 行 · 第 1/2 页

PHP
424
字号
 用Javascript动态添加和删除表格行(2)源代码 
JavaScript源代码

/* ------------------------------------------------------------------------------------------------------------- 
*说      明:本程序用于动态添加和删除表格之行(TR),并复制行中各标签,复制的标签对象将是表格中第一个含有标签的行 
            使用前请确保表格至少有一行可用来复制,并且各列的标签必须单一,而radio组必须先设名称(name),name的字符串不能其它属性重复 
            在每行末尾的单元格(TD)内必须有一添加和删除行的按钮, 
            在按钮的onclick事件中分别调用addRow和delRow方法在该行的下面添加一行和删除该行。 
*使用方法:推荐(适用一个页面只处理一个表格的情况) 
            (1)initTable(table)            : 初始化表格,需传递表格的id或表格对象。在初始化页面时就需调用该函数。 
            (2)addRow()和delRow()        : 分别用于“添加”和“删除”按钮的onClick事件中 
            (3)setBaseName(aStrName)    : 在提交表单时,设置表格行中各列标签的名称(从左至右的标签名)。参数为一数组 
            (4)getCount()                : 在提交表单时,获取表格含有标签的总行数。 
                                            假设用户设置的某个标签name值为"txt",最后表格中各行的标签name值 
                                            从上至下将变为"txt_0","txt_1"...,直至"txt_getCount()-1" 
            如果一个页面需要操作多个表格,则按下面方法 
            (1)addRow(table)和delRow(table)         
                分别用于“添加”和“删除”按钮的onClick事件中,在调用函数时必须传递表格id或表格对象 
            (2)setTable(table),setBaseName(aStrName)和getCount() 
                提交表单时,分别设置表格的id或表格对象以及标签名,这样才能得到各个表格含有标签的总行数 
*作    者:曾次清 
*日    期:2004年10月13日 
*提    示:如果操作发生了错误,请试着去掉addRow(table)和delRow(table)函数中的第一个注释,以检查。 
*备    注:目前支持的标签有"INPUT","TEXTAREA","SELECT", 
            如果要支持更多标签,请修改数组A_TAG_NAME和initTagValue(objTd)函数相应地方。 
-------------------------------------------------------------------------------------------------------------- */ 
var m_objTable;                //需要操纵的表格对象 
var m_strError;                //错误信息 
var m_aStrTagName;            //标签名,为一个数组,长度为表格的列数 

var m_aBgColor;                //各个单元格背景色,数组 
var m_aRowHtml;                //各个单元格内的html,数组 
var m_aHeight;                //各个单元格高度,数组 
var m_aAlign;                //各单元格水平对齐方式 

//设置支持的标签 
var A_TAG_NAME = new Array("INPUT","TEXTAREA","SELECT"); 


// ----------------------  初始化表格  ---------------------- // 

function initTable(table) 
{ 
    if( typeof(table) == "undefined" ) 
    { 
        alert("请传入参数:表格对象或表格id!"); 
        return; 
    } 
    setTable(table);     
    getRowProperty(getStartRow());        //获取行的相关属性 
}//end initTable(table) 


// -------------------  设置表格id或者表格对象 ------------------- // 
//如果不用此函数设置,则调用addRow和delRow函数时必须设置 

function setTable(table)           
{ 
    if(typeof(table) == "string") 
        this.m_objTable = getObjTableByID(table); 
    else if(typeof(table) == "object") 
        this.m_objTable = table; 
} 

// ---------------------- 设置表格各列中标签(HTML标签)的初始名称  ---------------------- // 

function setBaseName(aStrName) 
{ 
    if(typeof(m_objTable) == "undefined") 
    { 
        alert("您没有设置表格对象或表格id"); 
        return; 
    } 
    m_aStrTagName = aStrName; 
    setTagName(getStartRow(),getEndRow(),0); 
}//end setBaseName 

// ---------------------- 获取动态表格行数  ---------------------- // 
//只是能动态添加和删除的行数 
function getCount() 
{ 
    return (getEndRow() - getStartRow() + 1); 
} 

// ---------------- 在当前行的下方添加一行  ---------------- // 

function addRow(table) 
{ 
    //if(!isParameterTrue(addRow,table))    {alert(m_strError);return;} 
    if( typeof(table) != "undefined" )    initTable(table); 
     
    //得到当前行的索引 
    var intRowIndex = getRowIndex(); 
    var intNewTrIndex = intRowIndex + 1; 
    var aStrRowHtml = getNewRowHtml(getStartRow()); 
    m_objTable.insertRow(intNewTrIndex); 
     
    //将当前行各单元的innerHTML赋予新增行对应的各单元格 
    for(var i = 0;i < aStrRowHtml.length;i ++) 
    { 
        m_objTable.rows(intNewTrIndex).insertCell(); 
        m_objTable.rows(intNewTrIndex).cells(i).align = m_aAlign[i]; 
        if( m_aBgColor[i] != "") 
        { 
            m_objTable.rows(intNewTrIndex).cells(i).bgColor = m_aBgColor[i]; 
        } 
        if( m_aHeight[i] != "") 
        { 
            m_objTable.rows(intNewTrIndex).cells(i).height = m_aHeight[i]; 
        } 
        m_objTable.rows(intNewTrIndex).cells(i).innerHTML = aStrRowHtml[i]; 
        //最后一列为“添加行”、“删除行”的按钮,不需要赋予初值,其它列需要 
        if( i != (aStrRowHtml.length - 1)) 
            initTagValue(m_objTable.rows(intNewTrIndex).cells(i)); 
    } 
}//end addRow 

// ---------------------------- 删除当前行  ---------------------------- // 

function  delRow(table)   
{   
    try   
    {   
        //if(!isParameterTrue(delRow,table))    {alert(m_strError);return;} 
        if( typeof(table) != "undefined" )        setTable(table); 
         
        var Elm  =  event.srcElement; 
        while(Elm  &&  Elm.tagName  !=  "TR")   
        {   
            Elm  =  Elm.parentElement;   
        } 
        var intThisIndex = Elm.rowIndex; 
        Elm.parentElement.deleteRow(intThisIndex);   
    }   
    catch(ex)   
    {   
        alert("delRow() Err  5001:\r\n"  +  ex);   
        m_strError += "delRow() Error" + ex; 
    }   
}//end delRow() method 

// -------------------------  根据表格id得到表格对象  ------------------------- // 
//如果该id不存在,则返回null 
function getObjTableByID(tableID) 
{ 
    return document.getElementById(tableID); 
} 

/* ------------------------------------------------------------------------------------------------------ 
*功  能:设置各个单元格中标签名称,将从指定的起始行设置到指定的结束行 
*参  数:intStartRow :开始要设置名称的标签所在行索引 
            intEndRow : 最后要设置名称的标签所在行索引 
            intStartNo : 标签的起始编号,逐个增加 
------------------------------------------------------------------------------------------------------ */ 
function setTagName(intStartRow,intEndRow,intStartNo) 
{ 
    for( var i = intStartRow; i <= intEndRow;i ++ ) 
    { 
        for( var j = 0;j < m_aStrTagName.length;j ++ ) 
        { 
            var strBaseName = m_aStrTagName[j]; 
            var strTagName = strBaseName + "_" + intStartNo; 
            var objTd = m_objTable.rows(i).cells(j); 
            var objTagList; 
            for(var m = 0;m < A_TAG_NAME.length;m ++) 
            { 
                objTagList = objTd.getElementsByTagName(A_TAG_NAME[m]); 
                if( objTagList.length != 0 ) 
                    break; 
            } 
            if( objTagList.length == 0 ) 
            { 
                alertTagName(); 
                return; 
            } 
            for( var m = 0; m < objTagList.length;m ++ ) 
                objTagList[m].setAttribute("name",strTagName); 
        } 
        intStartNo ++; 
    } 
}//end setTagName() method 

// ----------------------------------  给标签赋予初值   ---------------------------------- // 

//将文本框赋予空值,如果是radio、checkbox标签,则将它们checked属性设为false 
//如果是select标签,则选中第一行 

function initTagValue(objTd) 
{ 
    var strSetValue = ""; 
    var strInputType = "";        //input标签的型别,如radio,checkbox等 
    var objTagList; 
    var strTagName; 
    for( var i = 0;i < A_TAG_NAME.length;i ++ ) 
    { 
        objTagList = objTd.getElementsByTagName(A_TAG_NAME[i]); 
        if( objTagList.length != 0 ) 
        { 
            strTagName = A_TAG_NAME[i]; 
            break; 
        } 
    } 
    for( var m = 0; m < objTagList.length;m ++ ) 
    { 
        switch(strTagName) 
        { 
            case "INPUT" : 
                    strInputType = objTagList[m].type; 
                    if( strInputType == "text" ) 
                        objTagList[m].setAttribute("value",strSetValue); 
                    else if( strInputType == "radio" ||  strInputType == "checkbox") 
                        objTagList[m].setAttribute("checked",false); 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?