大家好!我现在要处理在Table中某行任一控件获得焦点该行即变色,失去焦点则恢复原色的问题,初步想法是用一个全局变量保存变色前的行对象,代码如下:////////////////////////////////////////////////////////////////////
var DBGridPreFocusRow;//全局变量,保存行function ChangeCurrentRowColor(o,RowColor,TextColor)
{  
    var CurrentCell = o.parentNode;
    var CurrentRow = o.parentNode.parentNode;   
 
    DBGridPreFocusRow = CurrentRow.cloneNode(true);//复制行对象    
    alert(DBGridPreFocusRow.cells.length);//弹出框显示cells长度为0
     
    for(var i=0;i<=CurrentRow.cells.length - 1;i++)
    { 
         var ccl = CurrentRow.cells(i).childNodes(0);
         ccl.style.backgroundColor = RowColor;
         ccl.style.color = TextColor;         
    }       
}运行后,弹出框显示cells长度为0, 即行对象没复制成功!请大家给看看,我这段代码写得有什么问题?

解决方案 »

  1.   

    你把这个函数加在td上了还说table上了
      

  2.   

    是td里面的第0控件,我的table每个cell都有且仅有一个控件,比如textbox,dropdown等
      

  3.   

    这里复制成功了,但是cells长度肯定为0,因为你是clone出来的
    只能通过DBGridPreFocusRow.childNodes来获得子节点,不能通过cells
    保存全局变量DBGridPreFocusRow=CurrentRow;就可以了,为什么要clone呢
      

  4.   

    谢谢!我用alert(DBGridPreFocusRow.innerHTML == CurrentRow.innerHTML);看InnerHTML代码,显示true,看来的确复制成功。用cells是因为对js不熟悉,以为cells是Row对象的某个集合属性,用colne的原因是我要让该全局变量保存原来的配色信息,不然CurrentRow的配色信息改了之后就DBGridPreFocusRow的配色信息就跟着改了,失去了存在的意义。