小弟现在要做一个控件复制的功能保证被复制出来的控件和原控件具有一样的属性(id除外)现在复制style的时候出现了问题我发现一个控件的style是一个对象就想把原控件上的style对象中的属性遍历出来然后设置到复制出来的控件的style对象上比如:
//t1是一个text控件
var t1 = document.getElementById('t1');var t2 = document.createElement('INPUT');
t2.type='text';var style1 = t1.style;
for(var p in style1){
  
    t2.style[p] = style[p];
}就是想让t2和t1保持一样的渲染效果但是浏览器报错不知道如何实现请高手帮忙谢谢

解决方案 »

  1.   

    用样式表渲染原控件,给复制的控件一个与原控件相同的className不可以吗?
      

  2.   


    不行~因为原控件不是写在html页面上的而是在服务器端生成出来的字符串运行的时候写在页面上的所以没有样式表我也刚才也想到了用克隆现在去试试
      

  3.   

    在服务器端生成的字符串中给原控件多加一个className而已。为什么不能用样式表呢?
      

  4.   


    <script>
    window.onload=function(){
    var t1 = document.getElementById('t1');
    var t2 = document.createElement('INPUT');
    t2.style.cssText = t1.style.cssText;
    document.body.appendChild(t2);}
    </script>
    <body>
    <input type="text" style="border:1px dashed;" id="t1"></body>
      

  5.   

    clone一个吧
    <html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>test</title>
    <script>
    window.onload = function(){
    var d1 = document.getElementById("div1");
    var d2 = d1.cloneNode(true);
    document.body.appendChild(d2);
    }
    </script>
    </head><body>
    <div id=div1 style="width:400px;height:300px;background-color:red"></div>
    <br/>
    </body></html>
      

  6.   

    这段代码所以会出错,可能由于有一些样式是只读的,将这句try{}catch一下也可以一试
    try{t2.style[p] = style[p];}catch(e){}
      

  7.   

    试试这段,但在 FF 下,设置 border 有点问题(边框宽度未复制)<style>
    #div1{
    color:red;
    border:1px solid blue;
    }
    </style>
    <div id="div1" style="font-size:24px;">
    测试DIV1
    </div>
    <div id="div2">
    测试DIV2
    </div>
    <div id="divmsg"></div>
    <script>
    /**
    * 将 obj 的样式复制到 obj2 上
    */
    function copyStyles(obj, obj2){ var styles = obj.currentStyle || obj.ownerDocument.defaultView.getComputedStyle(obj,null);
    for(var e in styles){
    try{
    eval("obj2.style." + e + " = styles[e];");
    document.getElementById("divmsg").innerHTML += e + "=" + styles[e] + "<br/>";
    }catch(e){}
    }
    }window.onload = function(){
    copyStyles(document.getElementById("div1"), document.getElementById("div2"));
    }
    </script>
      

  8.   


    因为用户在绘制表样的时候谁也不知道他会画成什么样~表样的绘制程序是一个Swing程序,用户画的时候就跟在Excel上画一样格子就是格子,里面没有控件。到了Html上格子是TD,里面填报的数据是Text样式表里记录的是TD的CSS,Text的CSS我是在生成HTML字符串的时候写在了控件上用节点克隆已经解决了,我发现我以前真笨蛋居然不知道有这么好用的方法,还一个一个的自己创建控件,然后自己设置属性靠的肋~