用Javascript选择一个完整的表(要复制到剪贴板)

时间:2010-01-11 20:14:59

标签: javascript select highlight

我想知道是否有人知道如何使用js选择完整的表格,以便用户可以右键单击选择,将其复制到剪贴板,然后将其粘贴到Excel。如果您手动选择表格,则该过程可以完美地运行。但有时候,如果桌面高度比屏幕大几倍,选择它拖动鼠标会变得乏味。所以,我想让用户可以点击“选择整个表格”按钮,所有内容都可以复制。

有什么想法吗?

4 个答案:

答案 0 :(得分:94)

是。它并不太棘手,以下内容适用于所有主流浏览器(包括IE 6,实际上是5):

(在Jukka Korpela的评论指出前一版本在IE 9标准模式下不起作用后,2012年9月7日更新)

演示:http://jsfiddle.net/timdown/hGkGp/749/

代码:

function selectElementContents(el) {
	var body = document.body, range, sel;
	if (document.createRange && window.getSelection) {
		range = document.createRange();
		sel = window.getSelection();
		sel.removeAllRanges();
		try {
			range.selectNodeContents(el);
			sel.addRange(range);
		} catch (e) {
			range.selectNode(el);
			sel.addRange(range);
		}
	} else if (body.createTextRange) {
		range = body.createTextRange();
		range.moveToElementText(el);
		range.select();
	}
}
<table id="tableId" border="1">
	<thead>
		<tr><th>Heading 1</th><th>Heading 2</th></tr>
	</thead>
	<tbody>
		<tr><td>cell 1</td><td>cell 2</td></tr>
	</tbody>
</table>

<input type="button" value="select table" onclick="selectElementContents( document.getElementById('tableId') );">

答案 1 :(得分:7)

我最终通过使用以下脚本

让它在IE9中工作

注意:它不适用于html表。它必须是DIV。所以只需在您需要选择的表格周围放置一个包装DIV!

首先我稍微更改了HTML按钮代码:

<input type="button" value="Mark table"    onclick="SelectContent('table1');">  

然后将javascript更改为:

function SelectContent (el) {


var elemToSelect = document.getElementById (el);

        if (window.getSelection) {  // all browsers, except IE before version 9
            var selection = window.getSelection ();
            var rangeToSelect = document.createRange ();
            rangeToSelect.selectNodeContents (elemToSelect);

            selection.removeAllRanges ();
            selection.addRange (rangeToSelect);



        }

    else       // Internet Explorer before version 9
          if (document.body.createTextRange) {    // Internet Explorer
                var rangeToSelect = document.body.createTextRange ();
                rangeToSelect.moveToElementText (elemToSelect);
                rangeToSelect.select ();

        }

  else if (document.createRange && window.getSelection) {         
          range = document.createRange();             
          range.selectNodeContents(el);             
    sel = window.getSelection();     
                  sel.removeAllRanges();             
    sel.addRange(range);              
 }  
}

答案 2 :(得分:7)

只是让Tim Down提出的代码更加完整,允许将所选内容自动复制到剪贴板:

<script type="text/javascript">
    function selectElementContents(el) {
        var body = document.body, range, sel;
        if (document.createRange && window.getSelection) {
            range = document.createRange();
            sel = window.getSelection();
            sel.removeAllRanges();
            try {
                range.selectNodeContents(el);
                sel.addRange(range);
            } catch (e) {
                range.selectNode(el);
                sel.addRange(range);
            }
            document.execCommand("copy");

        } else if (body.createTextRange) {
            range = body.createTextRange();
            range.moveToElementText(el);
            range.select();
            range.execCommand("Copy");
        }
    }
</script>

<table id="tableId">
    <thead>
        <tr><th>Heading</th><th>Heading</th></tr>
    </thead>
    <tbody>
        <tr><td>cell</td><td>cell</td></tr>
    </tbody>
</table>

<input type="button" value="select table"
   onclick="selectElementContents( document.getElementById('tableId') );">

答案 3 :(得分:0)

这是我用过的。它还会执行copy命令,因此您要做的就是在要放入文档的文档中使用粘贴命令。基本上,您将要复制的内容包装在div中,使用innerHTML抓取并将其复制到剪贴板。我尚未在所有浏览器上对其进行测试,但可以在Chrome,Safari,Firefox中使用。

<div id="copycontent">
<table>
</table>
</div>
<input type="button" value="Mark table"    onclick="SelectContent('copycontent');">

<script type="text/javascript">
function SelectContent (el) {    
  var aux = document.createElement("div");
  aux.setAttribute("contentEditable", true);
  aux.innerHTML = document.getElementById("main").innerHTML;
  aux.setAttribute("onfocus", "document.execCommand('selectAll',false,null)"); 
  document.body.appendChild(aux);
  aux.focus();
  document.execCommand("copy");
  document.body.removeChild(aux);
}
</script>