当用户从网页复制网格并将其粘贴到记事本时复制网格线

Copy grid lines when user copies the grid from webpage and paste it into notepad

用户希望在从网页复制时将网格线与网格数据一起复制。这可能吗?

目前复制的结果是这样的:

name subject
lolo math
fofo history

我想要的是:

  |  name | subject |
   ---------------
  |  lolo | math    |
   ---------------
  |  fofo | history |

我用谷歌搜索,但找不到好的解决方案,而且我对前端技巧没有经验。

您需要为您的 table 创建一个 copy 事件:

//Here we assume that your table has an id and it is stored in myTable
document.getElementById(myTable).addEventListener('copy', function(e){
    e.preventDefault();
    e.clipboardData.setData("Text", parseClipboard(e.clipboardData.getData("Text")));
});

在上面的示例中,假定 parseClipboard 处理剪贴板中的文本并按您的意愿进行转换。您希望 split 以换行符作为分隔符的文本,添加您的 |每个项目(行)的行首和行尾的字符,然后 join 它们带有换行符----------------换行符

你可以这样做:

function changeCopiedText(event) {
    event.preventDefault();

    // get original text from selection
    var originaltext =  window.getSelection();

    // call your function to add the lines to the original text
    var textwithlines = addTableLines(originaltext);

    // add the new text to the clipboard
    if (window.clipboardData) {
        window.clipboardData.setData('Text', textwithlines);
    }
}

// capture the copy event
document.addEventListener('copy', changeCopiedText);

但您将不得不根据自己的需要考虑在 addTableLines 中添加这些行的最佳方式。

我的解决方案是将上述解决方案混合使用 Clipboard.js 并解析复制的文本:

  new Clipboard('.clipboard-btn', {
    text: function (trigger) {
      var originaltext = $(trigger).next('table').closest("#my-tbl").text();
      return addTableLines(originaltext);
    }
  });

我还在写 addTableLines 因为 split 没有检测到新行。