Выберите и скопируйте таблицу в буфер обмена - PullRequest
3 голосов
/ 03 апреля 2011

Я хочу выбрать таблицу без заголовков, и она работает, но я не могу получить ее так, чтобы она копировалась в буфер обмена.

Вот эта страница: http://tuudik.lohv.eu/Asjad/EURXML/

Вот код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>ECB kursid seisuga: 2011-04-01 </title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style type="text/css">
table
{
border-collapse:collapse;
}
table, td, th
{
border:1px solid black;
}
</style>
<script type="text/javascript">
    function selectElementContents(el) {
        var body = document.body, range, sel;
        if (body.createTextRange) {
            range = body.createTextRange();
            range.moveToElementText(el);
            range.select();
            range.execCommand('Copy');
        } else if (document.createRange && window.getSelection) {
            range = document.createRange();
            range.selectNodeContents(el);
            sel = window.getSelection();
            sel.removeAllRanges();
            sel.addRange(range);
            sel.execCommand('Copy');
        }

    }
</script>
</head>

<body>
<table cellpadding="2">
<thead>

    <tr>
        <th>Valuuta</th>
        <th>Kurss</th>
    </tr>
</thead>
<tbody id="currencies">
<tr><td>USD</td><td>1,4141</td></tr><tr><td>JPY</td><td>118,56</td></tr><tr><td>DKK</td><td>7,4564</td></tr><tr><td>GBP</td><td>0,88150</td></tr><tr><td>NOK</td><td>7,8055</td></tr><tr><td>RUB</td><td>40,1500</td></tr><tr><td>CAD</td><td>1,3686</td></tr></tbody>

</table>
<input type="button" value="select table"
   onclick="selectElementContents( document.getElementById('currencies') );">
</body>
</html>

Ответы [ 2 ]

2 голосов
/ 19 сентября 2014

Это работает для меня в IE8:

    var table = document.getElementById('copyHtmlToClipboard');
    // Below line is essential !!!
    table.contentEditable = 'true';   

    var controlRange = document.body.createControlRange();
    controlRange.addElement(table);
    controlRange.execCommand("Copy");
0 голосов
/ 03 апреля 2011

В большинстве браузеров невозможно скопировать в системный буфер обмена. Для этого вам нужно использовать хак. Самый распространенный способ - использовать Flash. ZeroClipboard делает это и, кажется, работает очень хорошо.

Кстати, execCommand() - это метод document и TextRange объектов, а не Selection объектов, поэтому sel.execCommand("Copy") не может работать.

UPDATE

Я никогда не использовал ZeroClipboard. Посмотрев на документы, он не выглядит так, как будто он делает то, на что я надеялся (похоже, нет способа скопировать форматированный текст), и это даже более отвратительный взлом, чем я думал. Вы можете скопировать содержимое таблицы в виде текста через innerHTML, используя ZeroClipboard, но будет ли это приемлемым или нет, зависит от того, что вы надеетесь сделать с копируемым содержимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...