Выберите полную таблицу с помощью Javascript (для копирования в буфер обмена) - PullRequest
57 голосов
/ 11 января 2010

Мне было интересно, знает ли кто-нибудь, как выбрать с помощью js полную таблицу, чтобы пользователь мог щелкнуть правой кнопкой мыши на выделении, скопировать его в буфер обмена и затем вставить в Excel. Если вы выбираете таблицу вручную, процесс работает отлично. Но иногда, если высота стола в несколько раз больше, чем экран, выделение его перетаскиванием мыши становится утомительным. Итак, я хочу дать пользователям возможность нажать на кнопку «выбрать всю таблицу», и все готово для копирования.

Есть идеи?

Ответы [ 4 ]

96 голосов
/ 11 января 2010

Да. Это не слишком сложно, и следующее будет работать во всех основных браузерах (включая IE 6 и даже 5):

(Обновлено 7 сентября 2012 г. после комментария Юкки Корпела, в котором указано, что предыдущая версия не работала в режиме стандартов IE 9)

Демо: 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') );">
8 голосов
/ 13 февраля 2017

Просто для того, чтобы сделать код, предложенный Тимом Дауном, более полным, позволяя автоматически копировать выбранный контент в буфер обмена:

<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') );">
7 голосов
/ 05 сентября 2012

Наконец-то я начал работать в 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);              
 }  
}
0 голосов
/ 19 июля 2018

Вот что я использовал. Он также создает команду копирования, поэтому все, что вам нужно сделать, это использовать команду вставки в документе, в который вы хотите ее поместить. По сути, вы оборачиваете содержимое, которое хотите скопировать, в 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>
...