2013-04-03 22 views
0
<!DOCTYPE html> 
<html> 
<head> 
    <title>Select Code</title> 
    <meta charset="UTF-8"> 
    <script type="text/javascript"> 
    window.onload = function() { 
     function selectCode(a) { 

     // Get ID of Code Block 
     var e = a.parentNode.parentNode.getElementsByTagName('code')[0]; 

     // Not IE or IE9+ 
     if (window.getSelection) { 
      var s = window.getSelection(); 
      if (s.setBaseAndExtent) { 
      s.setBaseAndExtent(e, 0, e, e.innerText.length - 1); 
      } 

      // Firefox and Opera 
      else { 
      if (window.opera && e.innerHTML.substring(e.innerHTML.length - 4) == '<br>') { 
       e.innerHTML = e.innerHTML + '&nbsp;'; 
      } 
      var r = document.createRange(); 
      r.selectNodeContents(e); 
      s.removeAllRanges(); 
      s.addRange(r); 
      } 
     } 

     // Some older browsers 
     else if (document.getSelection) { 
      var s = document.getSelection(); 
      var r = document.createRange(); 
      r.selectNodeContents(e); 
      s.removeAllRanges(); 
      s.addRange(r); 
     } 

     // IE 
     else if (document.selection) { 
      var r = document.body.createTextRange(); 
      r.moveToElementText(e); 
      r.select(); 
     } 
     }; 
    } 
    </script> 
</head> 
<body> 
    <a onclick="selectCode(this); return false;" href="#">Select all</a> 
    <code>Some Code</code> 
</body> 
</html> 

有没有人知道什么是错的?它只是不起作用。 :-(JavaScript:代码选择 - 出现了什么问题?

+2

“这是行不通的”不帮助任何人来帮助你的问题。 **如何**不起作用?控制台中是否存在错误?您预期会发生什么不是?您目前为止尝试调试问题? – Pointy

+0

哪一部分“不起作用”? –

+3

'selectCode'函数只存在于'window.onload'内部,它不存在于其他任何地方。 –

回答

1

我只是删除在window.onload

看到这里的工作代码http://jsfiddle.net/5n4cw/

<a onclick="selectCode(this);" href="#">Select all</a> 
<code>Some Code</code> 


<script type='text/javascript'> 

function selectCode(a) { 

     // Get ID of Code Block 
     var e = a.parentNode.parentNode.getElementsByTagName('code')[0]; 
     // Not IE or IE9+ 
     if (window.getSelection) { 
      var s = window.getSelection(); 
      if (s.setBaseAndExtent) { 
      s.setBaseAndExtent(e, 0, e, e.innerText.length - 1); 
      } 

      // Firefox and Opera 
      else { 
      if (window.opera && e.innerHTML.substring(e.innerHTML.length - 4) == '<br>') { 
       e.innerHTML = e.innerHTML + '&nbsp;'; 
      } 
      var r = document.createRange(); 
      r.selectNodeContents(e); 
      s.removeAllRanges(); 
      s.addRange(r); 
      } 
     } 

     // Some older browsers 
     else if (document.getSelection) { 
      var s = document.getSelection(); 
      var r = document.createRange(); 
      r.selectNodeContents(e); 
      s.removeAllRanges(); 
      s.addRange(r); 
     } 

     // IE 
     else if (document.selection) { 
      var r = document.body.createTextRange(); 
      r.moveToElementText(e); 
      r.select(); 
     } 
     } 

</script> 
+0

非常感谢! – Ben

+0

它只适用于一个代码段。如果有更多,只有第一个被选中。如何解决这个问题? – Ben

+0

这是因为你只在[0]上进行。取代a.parentNode.parentNode.getElementsByTagName('code')[0],取整个对象数组并遍历它 – hop