Скопировать тег таблицы HTML с форматом / стилем в буфер обмена

Я пытаюсь скопировать тег элемента таблицы HTML с форматом. Я следил за этими ответами Stackoverflow, но по-прежнему копируется только текст без формата.

https://stackoverflow.com/a/38821410 https://stackoverflow.com/a/30566157

Вот мой код 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();
    document.execCommand("Copy");
  }
}

Это кнопка копирования таблицы

@component('layouts.components.custom-button',
                              [
                              'id' => 'copyTable',
                              'class' => 'ml-auto m-r-10',
                              'tooltip' => 'Copy Table',
                              'position' => 'top right',
                              'target' => '',
                              'clipboard_target' => '#JoineeTrackerTable',
                              'toggle' => '',
                              'action' => '',
                              'icon' => 'file_copy',
                              ])
                            @endcomponent

Это код таблицы. Я динамически добавляю содержимое тела таблицы после его создания из PHP

<table id="JoineeTrackerTable" class="table table-responsive">
                    <thead>
                    <tr class="">
                        <th class="tablet-hide font-weight-bold c_id">No.</th>
                        <th>Full Name</th>
                        <th>Mobile Number</th>
                        <th class="">Designation</th>
                        <th class="">Recruiter</th>
                        <th class="">Country (Recruiter)</th>
                        <th class="">Organization</th>
                        <th class="">Process Type</th>
                        <th class="">Company Name</th>
                        <th class="">City/Company Site</th>
                        <th class="">DOI</th>
                        <th class="">DOJ</th>
                        <th class="">Joinee Status</th>
                        <th class="">Job Type</th>
                        <th class="">Comments</th>
                    </tr>
                    </thead>

                    <tbody id="joinee-tracker-list">

                    </tbody>
                </table>

Любая помощь будет оценена по достоинству.


person fahad shaikh    schedule 08.09.2019    source источник
comment
Куда вы вставляете этот html для проверки? если контекст представляет собой текст, например textarea, у вас не будет html.   -  person jcubic    schedule 08.09.2019
comment
Я вставил html в onenote, а также в компоновщик Gmail, но он нигде не работает.   -  person fahad shaikh    schedule 08.09.2019
comment
Попробуйте документ Word в формате html с contenteditable. Я не думаю, что Gmail принимает такой HTML-контент. Вы когда-нибудь вставляли что-то и форматировали вывод в этих приложениях? Я никогда не использую onenote, а в gmail вставляю только обычный текст.   -  person jcubic    schedule 08.09.2019
comment
В ворде тоже не работает. Когда я вставляю некоторый код в gmail, он принимает формат/стиль редактора (в моем случае phpstorm).   -  person fahad shaikh    schedule 08.09.2019
comment
Я только что проверил ваш код в консоли этой страницы: selectElementContents(document.querySelector('.prettyprint')) (скопируйте ваш код), и он работает в LIbreOffice Writer. Не уверен насчет Gmail или Onenote, не могу проверить.   -  person jcubic    schedule 11.09.2019
comment
Я нашел некоторый код Jsfiddle и codepen, который работает в onenote, когда я копировал таблицу, но когда я использовал точно такой же код в своем проекте, он больше не работал.   -  person fahad shaikh    schedule 15.09.2019
comment
Вероятно, у вас есть другие ошибки в коде, не связанные с исходным вопросом. Вам нужно научиться отлаживать это, и если вы нашли, почему это происходит, если вы не знаете, как это исправить, вам нужно будет показать соответствующий код. Это решение работает.   -  person jcubic    schedule 15.09.2019
comment
Но какие могут быть другие ошибки, из-за которых мой код копирует таблицу без формата?   -  person fahad shaikh    schedule 17.09.2019
comment
Подумайте, если скрипка работает, а ваш код нет, то проблема в вашем коде, а не в решении.   -  person jcubic    schedule 17.09.2019
comment
Я обновил свой код кодом кнопки копирования и кодом таблицы.   -  person fahad shaikh    schedule 28.09.2019


Ответы (1)


Если вам нужно скопировать элемент HTML в буфер обмена - для использования, отличного от веб-страницы (среды браузера), - я предлагаю вам попробовать инструменты IE F12...

  1. Перейдите на вкладку «DOM Explorer»
  2. Выберите интересующий элемент
  3. Щелкните правой кнопкой мыши, чтобы открыть меню команд полета, и
  4. Нажмите «Копировать элемент со стилями».

Последний раз, когда я использовал эту команду (в любой среде браузера) был 2005 год, и это был IE, поэтому я не знал, предоставляют ли другие браузеры эту опцию в своих самых последних инструментах разработки или нет. Я могу гарантировать его доступность только в IE F12.

В противном случае эта внешне простая и кажущаяся легкой задача быстро превращается в очень сложную работу.


В качестве альтернативы, запуск режима редактирования документа: ON может также предоставить вашу команду копирования, нацеленную на выбранный элемент с форматированием стиля.


Использование JavaScript для программного копирования контента и соответствующих ему стилей путем повторения и проверки текущих стилей каждого дочернего элемента, вложенного ниже, — мучение, превосходящее пользу. Но выполнимо!

person Bekim Bacaj    schedule 08.09.2019