Я отлаживаю чужой код, и функция «копировать» работает при первом нажатии, но для каждой последующей попытки его нужно дважды щелкнуть, чтобы скопировать.Я не могу понять, что является причиной этого.
Каждый узел выбирается, отмечая флажки, которые пользователь хочет скопировать, и затем нажимая «копировать».Затем скопированные данные можно вставить в Excel или аналогичные.
HTML:
<li id="copy">
<a title="Copy Contents Of Records" data-source="dbTable" href="#" ng-click="copyRow($event)" ng-class="{'disabled' : ShowLoading}"><i class="fa fa-paste"></i></a>
</li>
JAVASCRIPT:
$scope.copyRow = function ($event) {
$event.preventDefault();
let head = [];
angular.forEach($scope.data.objColumns,
function (col) {
head.push(col.strColumnName);
});
let rows = [];
angular.forEach($scope.data.objColumnData,
function (item) {
if (item.bolSelected) {
let row = [];
angular.forEach(item.columnData,
function (data) {
row.push(data.strColumnDisplayValue);
});
rows.push(row);
}
});
let virtualTable = document.createElement('table');
virtualTable.id = "virTab";
// For table head
for (let i = 0; i < head.length; i++) {
let th = document.createElement('th');
th.innerHTML = head[i];
virtualTable.appendChild(th);
}
// For table body
for (let i = 0; i < rows.length; i++) {
console.log(rows[i]);
let tr = document.createElement('tr');
for (let j = 0; j < rows[i].length; j++) {
let td = document.createElement('td');
td.innerHTML = rows[i][j];
td.removeAttribute('style');
tr.appendChild(td);
}
tr.removeAttribute('style');
virtualTable.appendChild(tr);
}
virtualTable.removeAttribute('style');
document.body.appendChild(virtualTable);
// Invoke copying function
let textRange;
if (isIE()) {
textRange = document.body.createTextRange();
textRange.moveToElementText(document.getElementById('virTab'));
textRange.execCommand("copy");
} else {
textRange = document.createRange();
textRange.selectNode(document.getElementById('virTab'));
window.getSelection().addRange(textRange);
const success = document.execCommand('copy');
let msg = success ? 'Success' : 'Failure';
console.log(msg);
window.getSelection().removeAllRanges();
}