使用Javascript选择完整的表格(用于复制到剪贴板)

22 浏览
0 Comments

使用Javascript选择完整的表格(用于复制到剪贴板)

请问是否有人知道如何使用js选择整个表格,这样用户就可以右键点击选择,将其复制到剪贴板上,然后粘贴到Excel中。如果手动选择表格,该过程完全正常。但有时,如果表格高度比屏幕高几倍,使用鼠标拖动选择变得很繁琐。所以,我想给用户提供一个“选择整个表格”的按钮,一切都准备好可以复制了。

有什么想法吗?

0
0 Comments

问题:如何使用JavaScript选择一个完整的表格(以便复制到剪贴板)?

原因:在IE 9“标准模式”下,代码无法正常工作,控制台会显示一个关于无法完成操作的错误信息,错误代码为800a025e,与代码中的range.select();相关。该问题在Quirks模式下和将浏览器模式设置为IE 8时可以正常工作。

解决方法:在代码中添加一个解决方法,使用document.createRange()window.getSelection()来选择元素的内容,并在range.selectNodeContents(el)抛出异常时使用range.selectNode(el)

代码如下:

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') );">

以上就是使用JavaScript选择完整表格并复制到剪贴板的方法。

0
0 Comments

问题的原因是在Javascript中选择一个完整的表格(以便复制到剪贴板)时,代码只能选择DIV元素,而不能直接选择HTML表格。解决方法是在需要选择的表格周围添加一个包装的DIV元素,然后将其作为参数传递给SelectContent函数。在函数中,使用不同的方法来选择和复制内容,根据不同的浏览器兼容性。

// 修改HTML按钮代码

// Javascript函数
function SelectContent(el) {
  var elemToSelect = document.getElementById(el);
  if (window.getSelection) { // 所有浏览器,除了IE9之前的版本
    var selection = window.getSelection();
    var rangeToSelect = document.createRange();
    rangeToSelect.selectNodeContents(elemToSelect);
    selection.removeAllRanges();
    selection.addRange(rangeToSelect);
  } else if (document.body.createTextRange) { // IE9之前的版本
    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);
  }
}
// 使用示例
数据

通过以上代码,我们可以在点击按钮时选择整个表格,并将其内容复制到剪贴板中。需要注意的是,这个方法只适用于选择DIV元素包含的表格,而不适用于直接选择HTML表格。

0
0 Comments

问题的原因是在复制表格内容时,会额外复制一个空白行。但是在HTML中并没有这个空白行。

解决方法是在选择表格内容之前,先排除掉空白行。具体代码如下:

function selectElementContents(el) {
    var body = document.body, range, sel;
    if (document.createRange && window.getSelection) {
        range = document.createRange();
        sel = window.getSelection();
        sel.removeAllRanges();
        try {
            // 排除空白行
            var firstRow = el.getElementsByTagName("tr")[0];
            if(firstRow && firstRow.childNodes.length > 0){
                var firstCell = firstRow.childNodes[0];
                if(firstCell){
                    range.setStartAfter(firstCell);
                }
            }
            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");
    }
}

这样修改后的代码会先找到表格的第一个单元格,然后将选择范围设置在第一个单元格之后,从而排除了空白行的复制。

0