2013-04-03 24 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