本人JS小菜 想实现一个代码复制的功能,google了一下有此代码能实现此功能。但看不懂以下逻辑,请XDJM解答一下,在线等。
function findobj(n,d) { //这个函数实现的思路是什么?
    var p,i,x; 
    if(!d) d=document;
    if((p=n.indexOf("?"))>0 && parent.frames.length) { //这行代码什么功能?
        d=parent.frames[n.substring(p+1)].document;
        n=n.substring(0,p);
    }
    if(!(x=d[n])&&d.all) {
        x=d.all[n];
    }
    for(i=0;!x && i<d.forms.length;i++) {
        x=d.forms[i][n];
    }
    for(i=0;!x && d.layers&&i>d.layers.length;i++) {
        x=MM_findObj(n,d.layers[i].document);
    }
    return x;
}
function copycode(obj) {
    var rng = document.body.createTextRange();
    rng.moveToElementText(obj);
    rng.scrollIntoView();
    rng.select();
    rng.execCommand("Copy");
    window.alert("代码已复制到剪贴板中!");
    rng.collapse(false);
}

解决方案 »

  1.   

    代码复制的功能,只用后面一个函数就可以了:function copycode(obj) { 
        var rng = document.body.createTextRange(); 
        rng.moveToElementText(obj); 
        rng.scrollIntoView(); 
        rng.select(); 
        rng.execCommand("Copy"); 
        window.alert("代码已复制到剪贴板中!"); 
        rng.collapse(false); 
    }第一个函数用不着,测试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">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head><body>
    <label name="testtext" id="testtext" onclick="copycode(this);">test copy functionsdfsdf sdfsd
    </label>
    <script type="text/javascript">function copycode(obj) { 
        var rng = document.body.createTextRange(); 
        rng.moveToElementText(obj); 
        rng.scrollIntoView(); 
        rng.select(); 
        rng.execCommand("Copy"); 
        window.alert("代码已复制到剪贴板中!"); 
        rng.collapse(false); 
    }
    </script></body>
    </html>
      

  2.   

    我是想通过点击一个复制代码的按钮将代码复制,所以findobj()还是需要的。可不清楚这个函数实现代码的内在逻辑,请高人一下注解一下吧
      

  3.   

    你是想实现点击一个复制代码的按钮将代码复制,对吧?
    下面这段代码可以实现:<!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">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head><body>
    <script type="text/javascript">function copyText(obj) {
        obj.select();
        clipboardData.setData("text",obj.createTextRange().text);
            alert(clipboardData.getData("text"));
    }
    </script>
    <input id="content" name="content"  type="text" />
    <input name="btnSubmit" type="submit" onclick="javascript:copyText(document.getElementById('content'));" value="提交" />
    </body>
    </html>还是一定要知道第一函数的功能,如果有例子的话,请把例子也粘出来,要不看起来头疼
      

  4.   

    html代码片断:
    <p><table border="0" cellpadding="0" cellspacing="0" width="50%" id="codecontent">
    <tr><td class="memitem" valign="left">
    <pre>

    #include &lt;stdio.h&gt; int main()
    {
        printf("Hello World!\r\n");
        return 0;
    }
    </td></tr></table><p>
    <INPUT class=button onclick="copycode(findobj('codecontent'));" type=button value="复制代码"> js代码:
    function findobj(n,d) { //这个函数实现的思路是什么?
        var p,i,x;
        if(!d) d=document;
        if((p=n.indexOf("?"))>0 && parent.frames.length) { //这行代码什么功能?
            d=parent.frames[n.substring(p+1)].document;
            n=n.substring(0,p);
        }
        if(!(x=d[n])&&d.all) {
            x=d.all[n];
        }
        for(i=0;!x && i <d.forms.length;i++) {
            x=d.forms[i][n];
        }
        for(i=0;!x && d.layers&&i>d.layers.length;i++) {
            x=MM_findObj(n,d.layers[i].document);
        }
        return x;
    }
    function copycode(obj) {
        var rng = document.body.createTextRange();
        rng.moveToElementText(obj);
        rng.scrollIntoView();
        rng.select();
        rng.execCommand("Copy");
        window.alert("代码已复制到剪贴板中!");
        rng.collapse(false);
    }
    楼上的,再给解答一下吧。
      

  5.   

    加上注释如下,并附上测试代码<!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">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script language="javascript" type="text/javascript">function findobj(n,d) { //取得要复制的对象,并返回 
    debugger;
        var p,i,x; 
        if(!d) d=document; //判断是否传了第二个参数d,如果没传第二个参数d,则!d为true,为d赋值文文件对象document
        if((p=n.indexOf("?"))>0 && parent.frames.length) { //判断当前页是否存在框架 
            d=parent.frames[n.substring(p+1)].document; 
            n=n.substring(0,p); 
        } 

    //下面的if和接下来的for语句是在ie下给x赋值
        if(!(x=d[n])&&d.all) { //为变量x赋值d[n],如果不存在d[n]对象,且d.all存在,则为x赋值d.all[n]
            x=d.all[n]; 
        } 
        for(i=0;!x && i <d.forms.length;i++) { //为变量x赋值d[n],如果不存在d[n]对象,且d.all存在,则为x赋值d.all[n]
            x=d.forms[i][n]; 
        } 

    //下面的for语句是在Netscape下给x赋值
        for(i=0;!x && d.layers&&i>d.layers.length;i++) { //所传参数d对象的层个数,循环判断为x赋的值不存在时!x为真,且i< d.layers.length时,重新为x赋值递归调用自身函数MM_findObj的返回值
            x=findObj(n,d.layers[i].document); 
        } 
        return x; //返回对象

    function copycode(obj) { 
        var rng = document.body.createTextRange(); 
        rng.moveToElementText(obj); 
        rng.scrollIntoView(); 
        rng.select(); 
        rng.execCommand("Copy"); 
        window.alert("代码已复制到剪贴板中!"); 
        rng.collapse(false); 
    } </script>
    </head><body>
    <p> <table border="0" cellpadding="0" cellspacing="0" width="50%" id="codecontent"> 
    <tr> <td class="memitem" valign="left"> 
    askdjflsadjflsakdjflksd
    <!--<pre> #include &lt;stdio.h&gt; int main() 

        printf("Hello World!\r\n"); 
        return 0; 
    }   -->
    </td> </tr> </table> <p> 
    <INPUT class=button onclick="copycode(findobj('codecontent'));" type=button value="复制代码"> </body>
    </html>
      

  6.   

    Thanks floor 6 for your annotating in detail.